在基于 Centos6.9 + Anaconda 搭建 TensorFlow 深度学习环境成功后,在导入 import TensorFlow
时,可能会产生如下报错:/usr/lib/libstdc++.so.6:version ‘CXXBAI_1.3.9’not found...
,怎么办?!!
通过查阅相关资料,发现问题是由于升级了 GCC
,却没有将升级后的 GCC
的动态库去替换老版本的 GCC
动态库所致,本文我们会给出相关的解决办法。
👇👇👇 详细步骤说明 👇👇👇
[1] >>>> 查看动态库
1 2 3 4 5 $ strings /usr/lib64/libstdc++.so.6 | grep CXXABI 1.CXXABI_1.3 2.CXXABI_1.3.1 3.CXXABI_1.3.2 4.CXXABI_1.3.3
这里可以发现,CXXABI
最高版本只有 1.3.3
,没有 1.3.9
的。这就说明出现这些问题,是因为升级 gcc
时,生成的动态库没有替换老版本 gcc
的动态库。
接下来查看 gcc
动态库链接情况:接下来查看 gcc
动态库链接情况:
1 2 $ ls -l /usr/lib64/libstdc++.so.6 lrwxrwxrwx. 1 rootroot 19 Apr 7 17:57 $ /usr/lib/libstdc++.so.6 ->libstdc++.so.6.0.13
我们发现,libstdc++.so.6
是个软连接,被链接到了 libstdc++.so.6.0.13
上,而 libstdc++.so.6.0.13
是老版本的动态库。
所以接下来我们要做的就是将 libstdc++.so.6
连接到新版本的动态库上去。
[2] >>>> 查找编译 GCC 时生成的最新动态库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ sudo find / -name "libstdc++.so.*" /usr/lib64/libstdc++.so.6.0.13 /usr/lib64/libstdc++.so.6 /root/anaconda2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda2/lib/libstdc++.so.6.0.24 /root/anaconda2/lib/libstdc++.so.6 /root/anaconda2/envs/tensorflow/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda2/envs/tensorflow/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda2/envs/tensorflow/lib/libstdc++.so.6.0.24 /root/anaconda2/envs/tensorflow/lib/libstdc++.so.6 /root/anaconda2/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda2/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda2/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/lib/libstdc++.so.6.0.24 /root/anaconda2/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/lib/libstdc++.so.6
其中 /root/anaconda2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
就是我们新版本的动态库。
[3] >>>> 备份原生 /usr/lib64/libstdc++.so.6
1 2 $ cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak $ rm /usr/lib64/libstdc++.so.6
[4] >>>> 重新链接 libstdc++.so.6
1 $ ln –s /root/anaconda2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6
[5] >>>> 默认动态库升级完成,重新运行以下命令检查动态库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ strings /usr/lib64/libstdc++.so.6 | grep CXXABI CXXABI_1.3 CXXABI_1.3.1 CXXABI_1.3.2 CXXABI_1.3.3 CXXABI_1.3.4 CXXABI_1.3.5 CXXABI_1.3.6 CXXABI_1.3.7 CXXABI_1.3.8 CXXABI_1.3.9 CXXABI_1.3.10 CXXABI_1.3.11 CXXABI_TM_1 CXXABI_FLOAT128
可以看到,确实是链接到新的动态库上去了。完成!!!
👇👇👇 实际环境安装过程如下 👇👇👇
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [root@localhost lib64]# find / -name "libstdc++.so.*" /root/anaconda3/envs/tensorflow/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda3/envs/tensorflow/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda3/envs/tensorflow/lib/libstdc++.so.6.0.24 /root/anaconda3/envs/tensorflow/lib/libstdc++.so.6 /root/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda3/lib/libstdc++.so.6.0.24 /root/anaconda3/lib/libstdc++.so.6 /root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24 /root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/lib/libstdc++.so.6.0.24 /root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.13 /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyo /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyc /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.py /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyo /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyc /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.py [root@localhost lib64]# cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak [root@localhost lib64]# rm /usr/lib64/libstdc++.so.6 rm: remove symbolic link `/usr/lib64/libstdc++.so.6'? y [root@localhost lib64]# ln -s /root/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6 [root@localhost lib64]# source activate tensorflow (tensorflow) [root@localhost lib64]# python Python 3.5.4 |Anaconda, Inc.| (default, Nov 20 2017, 18:44:38) [GCC 7.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. > >> import tensorflow > >>