CentOS7运行TensorFlow脚本报错:libstdc++.so.6缺失CXXABI_1.3.9版本
libstdc++.so.6: version CXXABI_1.3.9' not found的问题 我之前在CentOS 7上跑TensorFlow脚本时也碰到过一模一样的问题——之前好好的突然报错,查了一堆Ubuntu的解决方案完全不适用,折腾了好一阵子才搞定,分享几个亲测有效的办法:
问题根源
CentOS 7自带的libstdc++.so.6版本偏老,默认不支持CXXABI_1.3.9;而你的Anaconda环境虽然装了7.2.0版本的libgcc,但系统大概率优先调用了系统自带的旧库,导致版本不匹配。
方法一:替换系统软链接(一劳永逸)
这个方法直接让系统优先使用Anaconda环境里的新版库,适合长期使用:
先确认系统当前支持的CXXABI版本,运行命令:
strings /usr/lib64/libstdc++.so.6 | grep CXXABI你会发现输出里没有
CXXABI_1.3.9,这就是问题所在。找到你的Anaconda环境中新版
libstdc++.so.6的路径,比如你的Anaconda安装在/home/xxx/anaconda3,TensorFlow所在的环境名叫tf_env,路径就是:/home/xxx/anaconda3/envs/tf_env/lib/libstdc++.so.6(可以用
find /home/xxx/anaconda3 -name "libstdc++.so.6"命令查找)备份系统原有的库文件,防止出问题:
sudo cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak创建新的软链接指向Anaconda里的新版库:
sudo ln -sf /home/xxx/anaconda3/envs/tf_env/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6再次验证版本,运行第一步的命令,现在应该能看到
CXXABI_1.3.9了,重启PyCharm再跑脚本就正常了。
方法二:临时指定库加载路径(不修改系统)
如果不想动系统文件,可以在运行脚本时指定优先加载Anaconda环境的库:
PyCharm中设置:
打开Run Configuration,找到「Environment Variables」,添加一条变量:LD_LIBRARY_PATH=/home/xxx/anaconda3/envs/tf_env/lib:$LD_LIBRARY_PATH保存后再运行脚本即可。
终端运行脚本:
先执行以下命令设置环境变量,再运行脚本:export LD_LIBRARY_PATH=/home/xxx/anaconda3/envs/tf_env/lib:$LD_LIBRARY_PATH python your_script.py
注意事项
- 如果后续Anaconda环境被删除或更新,记得重新检查软链接是否有效,失效的话用备份恢复再重新设置。
- 替换系统软链接有一定风险,操作前一定要做好备份,万一出现系统异常,用
sudo cp /usr/lib64/libstdc++.so.6.bak /usr/lib64/libstdc++.so.6就能恢复。
内容的提问来源于stack exchange,提问作者RTM

