You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派使用libtorch构建C++程序的链接错误解决求助

树莓派ARM架构下libtorch编译的原子操作链接错误解决方案

问题背景

我正在树莓派上开发基于libtorch和OpenCV的C++程序,起初遇到了架构不匹配的链接问题:

  • CMake输出显示libtorch依赖的libc10.so是x86-64架构,而树莓派是ARM架构,导致make链接阶段报错:
    /usr/lib/libc10.so: file not recognized: file format not recognized
    collect2: error: ld returned 1 exit status
    
  • 验证文件架构后确认问题:
    # 不符合架构的x86-64版libc10.so
    /usr/lib/libc10.so: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=f8019a46a003bc238af0fb3fb8331af8af69aa33, not stripped
    # 正确适配ARM的libtorch.so
    /usr/lib/libtorch.so.3.0.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=2f8320292f01aab7c9e2e2577b3be2025689c0a7, stripped
    

于是我尝试在树莓派上从头编译PyTorch以生成ARM适配的libtorch,但编译数小时后卡在链接阶段,出现一系列原子操作函数未定义的错误:

/usr/bin/ld: /home/<myuser>/pytorch_install/pytorch/build/lib/libcaffe2.so: undefined reference to `__atomic_fetch_add_8'
/usr/bin/ld: /home/<myuser>/pytorch_install/pytorch/build/lib/libcaffe2.so: undefined reference to `__atomic_load_8'
/usr/bin/ld: /home/<myuser>/pytorch_install/pytorch/build/lib/libcaffe2.so: undefined reference to `__atomic_exchange_8'
/usr/bin/ld: /home/<myuser>/pytorch_install/pytorch/build/lib/libcaffe2.so: undefined reference to `__atomic_fetch_sub_8'
/usr/bin/ld: /home/<myuser>/pytorch_install/pytorch/build/lib/libcaffe2.so: undefined reference to `__atomic_compare_exchange_8'
collect2: error: ld returned 1 exit status

不过编译过程已经生成了ARM架构的libc10.so,替换后项目构建有进展但仍有格式问题,说明完成完整的libtorch编译能解决根本问题。

可行的解决方案

针对树莓派ARM架构下PyTorch编译时的原子操作链接错误,有几个经过验证的修复方向:

  • 显式链接atomic库
    在编译PyTorch时,给链接器添加-latomic参数,直接解决原子函数的引用问题:
    # 方式1:在make时指定链接选项
    make ATOMIC_LINK_OPTS="-latomic"
    
    # 方式2:在cmake配置阶段就设置链接参数
    cmake .. -DCMAKE_EXE_LINKER_FLAGS="-latomic" -DCMAKE_SHARED_LINKER_FLAGS="-latomic"
    
  • 跳过测试程序编译
    错误出现在测试用例的链接阶段,我们可以禁用测试编译,既加快编译速度又规避这个错误:
    cmake .. -DBUILD_TEST=OFF
    
  • 升级系统gcc版本
    树莓派默认的低版本gcc对64位原子操作的支持有限,升级到gcc-8及以上版本后,再重新编译PyTorch,也能解决这类兼容性问题。

后续进展

我已经找到描述相同问题的社区issue,正在尝试上述解决方案,成功后会撰写完整的树莓派编译libtorch的教程。

内容的提问来源于stack exchange,提问作者totok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:32:34