Libstdc++.so.6 Version 'CXXABI_1.3.X' Not Found

在基于 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
>>>
Author

Waldeinsamkeit

Posted on

2018-04-01

Updated on

2023-04-01

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.