编译PyTorch时Conda环境下CMake CXX Compiler报错求助
解决PyTorch编译时
memcpy@GLIBC_2.14未定义引用问题 核心原因
conda-forge的gcc 9.5.0编译出的代码依赖较高版本的GLIBC符号,但系统自带的libstdc++.so版本偏低,或是环境中libstdc++的路径优先级冲突,导致链接阶段无法找到对应符号。
具体解决步骤
1. 强制使用conda环境内的libstdc++
编译前设置环境变量,让编译器优先调用conda环境自带的libstdc++,避免使用系统版本:
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH export CXXFLAGS="-Wl,-rpath,$CONDA_PREFIX/lib $CXXFLAGS"
执行完上述命令后,重新启动CMake配置和编译流程。
2. 降级gcc版本适配系统GLIBC
若系统GLIBC版本低于2.14(可通过ldd --version查看),可降级conda环境的gcc到对GLIBC依赖更低的版本,比如7.x系列:
conda install -c conda-forge gcc=7.5.0 gxx=7.5.0
重新激活环境后,再重新配置PyTorch编译参数。
3. 手动指定libstdc++路径给CMake
运行cmake时显式指定链接conda环境的libstdc++:
cmake .. -DCMAKE_CXX_FLAGS="-Wl,-rpath,$CONDA_PREFIX/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-rpath,$CONDA_PREFIX/lib"
若使用PyTorch的setup.py编译,可先设置环境变量再执行安装:
export CMAKE_PREFIX_PATH=$CONDA_PREFIX python setup.py install
4. 升级系统GLIBC(可选,需谨慎)
若具备系统权限,可直接升级系统GLIBC到2.14及以上版本,但此操作可能影响系统其他程序,需提前备份。也可通过源码编译GLIBC并指定独立安装路径,编译PyTorch时指向该路径的库文件。
环境验证方法
编译前可先测试C++编译器是否正常工作:
echo '#include <iostream> int main() { char src[10] = "test"; char dst[10]; memcpy(dst, src, 5); std::cout << dst << std::endl; return 0; }' > test.cpp g++ test.cpp -o test ./test
若程序正常输出"test",说明编译器环境无问题,可继续PyTorch编译。
内容的提问来源于stack exchange,提问作者DAKSH
相关产品推荐
相关产品推荐

