解决/usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found、‘GLIBC_2.23’ not found问题
在centos中使用tensorflow时会因为编译器版本不够高而无法使用,看了很多博客遇到很多坑,搞崩两次服务器终于找到合适的办法,参考了很多博客
错误1
ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /root/anaconda3/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
使用
strings /usr/lib64/libstdc++.so.6|grep CXXABI
可以查看系统当前有的版本
-
从网上下载libstdc++.so.6.0.26(新版本都可以) ,放到任意文件夹,我放入的目录为/opt(我从网上下载然后传到服务器)
-
进入/opt 将把libstdc++.so.6.0.26拷贝到/usr/lib64目录下。
cp libstdc++.so.6.0.26 /usr/lib64/
- 删除原来的libstdc++.so.6符号连接(先备份)
mv libstdc++.so.6 libstdc++.so.6.bak #重命名,以防恢复时使用
- 建立新的符号链接
ln -s libstdc++.so.6.0.26 libstdc++.so.6 #重新构建动态链接库
- 再次查看CXXABI_1.3.8就有了
错误2
ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /root/anaconda3/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
- 解压
tar -xzvf glibc-2.23.tar.gz
- 进入解压后的文件夹glibc-2.23,建立临时目录
mkdir build #创建子文件夹
cd build
../configure --prefix=/opt/glibc-2.23 #/opt/glibc-2.23不应该为解压目录
此处有些要注意的地方,解压的glic-2.23.tar.gz源码和编译时定义的目录…/configure --prefix=/opt/glibc-2.23不应该放到了一起。否则编译的时候可能出现下面的错误:
/usr/bin/install: `include/limits.h' and `/opt/glibc-2.14/include/limits.h' are the same file
- 编译安装
make && make install
- 将编译好的libc-2.23.so 复制到/usr/lib64/下
cp /opt/glibc-2.23/lib/libm-2.23.so /usr/lib64/
- 重命名(备份)libm.so.6 此处要进入/usr/lib64/目录下
mv libm.so.6 libm.so.6.bak
- 重新构建动态库libm.so.6
ln -s libm-2.23.so libm.so.6
到此基本就大功告成啦!!撒花~~~
参考博客
https://blog.csdn.net/m0_38052384/article/details/103016152