Fedora 38下使用Libtorch编译C++项目遇GLIBC链接错误求助
基于Libtorch的C++项目编译错误:memcpy@GLIBC_2.14未定义引用
错误信息
执行
make命令时触发链接错误:
/home/labuser/anaconda3/envs/Research/bin/../lib/gcc/x86_64-conda-linux-gnu/13.1.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/labuser/anaconda3/envs/Research/lib/python3.11/site-packages/torch/lib/libc10.so: undefined reference to `memcpy@GLIBC_2.14' collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/learn.dir/build.make:101: learn] Error 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/learn.dir/all] Error 2 make: *** [Makefile:91: all] Error 2
环境信息
- 操作系统:Fedora 38(系统glibc版本2.37)
- 依赖管理:通过Conda安装PyTorch/Libtorch与GXX编译器
- 构建工具:CMake
- 对比验证:Fedora 37(glibc 2.36)环境下无此问题
已尝试操作
- 执行
dnf update glibc更新系统glibc - 更新Conda环境内PyTorch等组件至最新版本
- 替换链接PyTorch官网下载的ABI兼容/非兼容版Libtorch头文件
CMake配置警告
执行CMake时出现如下警告:
-- Caffe2: Protobuf version 3.20.3 CMake Warning at /home/labuser/anaconda3/envs/Research/lib/python3.11/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:22 (message): static library kineto_LIBRARY-NOTFOUND not found. Call Stack (most recent call first): /home/labuser/anaconda3/envs/Research/lib/python3.11/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:127 (append_torchlib_if_found) CMakeLists.txt:8 (find_package)
解决方案
1. 解决Conda与系统glibc的符号冲突
问题核心是Conda环境内的编译器优先链接了Conda自带的旧版本glibc符号,而非系统高版本glibc。可通过以下方式处理:
- 在CMakeLists.txt中添加链接参数,强制包裹memcpy符号:
此参数让链接器使用本地实现替代特定版本的memcpy符号,规避版本依赖问题。target_link_libraries(your_target_name PRIVATE -Wl,--wrap=memcpy) - 临时调整库加载优先级:激活Conda环境后执行
export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH,让系统库优先于Conda库加载(注意此操作可能影响Conda环境内其他依赖兼容性,需测试)。
2. 从源码编译适配当前glibc的PyTorch/Libtorch
若上述方法无效,可手动编译PyTorch适配系统环境:
- 克隆PyTorch仓库并切换至目标版本分支
- 在Conda环境中配置编译参数,绑定系统glibc与编译器:
编译生成的Libtorch会完全适配当前系统的glibc版本,彻底解决符号引用问题。export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"} python setup.py build develop
3. 消除kineto库警告
该警告不影响项目编译运行,若需消除:
- 安装kineto依赖:在Conda环境中执行
conda install -c pytorch kineto - 或在CMakeLists.txt中添加配置禁用kineto查找:
set(Torch_NO_KINETO ON)
内容的提问来源于stack exchange,提问作者rootware
相关产品推荐
相关产品推荐

