Linux上运行“.py”文件,报错信息:
ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found 
(required by
anaconda3/lib/python3.6/site-packages/scipy/sparse/_sparsetools.cpython-36m-x86_64-linux-gnu.so)
原因:gcc动态库版本过老

最简单的方案:不需要Root权限
  vi  ~/.bash_profile 
在文件中添加如下代码
LD_LIBRARY_PATH=/home/feng/anaconda3/lib:$LD_LIBRARY_PATH
(将anaconda3库文件路径添加到系统的库文件路径中) export LD_LIBRARY_PATH$ source  ~/.bash_profile



下面两个方案,需要Root权限。

方案一:




a. 查看动态库strings /usr/lib64/libstdc++.so.6 | grep CXXABI结果如下:
* CXXABI_1.3
* CXXABI_1.3.1
* CXXABI_1.3.2
* CXXABI_1.3.3发现最高版本只有1.3.3,没有1.3.9的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。
ls -l /usr/lib/libstdc++.so.6
* lrwxrwxrwx. 1 root root 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连接到新版本的动态库上去。


b. 执行以下命令,查找编译gcc时生成的最新动态库:(有时找不到最新的动态库,可以参考方案二)
* find / -name "libstdc++.so.*"结果如下:
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/prev-i686-pc-linux-gnu/libstdc++-v3
/src/.libs/libstdc++.so.6.0.22
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/prev-i686-pc-linux-gnu/libstdc++-v3
/src/.libs/libstdc++.so.6
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/stage1-i686-pc-linux-gnu/libstdc++-
v3/src/.libs/libstdc++.so.6.0.22
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/stage1-i686-pc-linux-gnu/libstdc++-
v3/src/.libs/libstdc++.so.6
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/i686-pc-linux-gnu/libstdc++-v3/src
/.libs/libstdc++.so.6.0.22
* /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/i686-pc-linux-gnu/libstdc++-v3/src
/.libs/libstdc++.so.6
* /usr/local/lib/libstdc++.so.6.0.22
* /usr/local/lib/libstdc++.so.6.0.22-gdb.py
* /usr/local/lib/libstdc++.so.6
* /usr/lib/libstdc++.so.6.0.13
* /usr/lib/libstdc++.so.6
其中/usr/local/src/gcc-build-6.3.0是我们升级gcc时的输出目录,libstdc++.so.6.0.22就是我们的新版本的动态库。
c. 将上面的最新目录复制到/usr/lib64/目录下:
* cp /usr/local/src/gcc-6.3.0/gcc-build-6.3.0/i686-pc-linux-gnu/libstdc++-v3/
src/.libs/libstdc++.so.6.0.22 /usr/lib64/
d. 将libstdc++.so.6连接到libstdc++.so.6.0.22上去:

* cd /usr/lib64
* rm -rf libstdc++.so.6
* ln -s libstdc++.so.6.0.22 libstdc++.so.6
e. 默认动态库升级完成。重新运行以下命令检查动态库:
* 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_TM_1
* CXXABI_FLOAT128可看到确实是连接到新的动态库上去了。完成!

方案二:

      进行到方案一中b时,如果找不到gcc中的最新的动态库,可以将anaconda3/lib 中的 最新的动态库---------

“  libstdc++.so.6.0.24” (可能有的版本不一样,只要是版本最新的即可) ,拷贝到“ /usr/lib64”目录下。

可以通过下面的命令,查看anaconda3/lib/libstdc++.so.6 中是否有 CXXABI_1.3.9



* strings /anaconda3/lib/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_TM_1
* CXXABI_FLOAT128
再将libstdc++.so.6连接到libstdc++.so.6.0.24上去。



友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信