ImportError lib64 libstdc++.so.6 version CXXABI 1.3.9 not found required by home anaconda

1 現象:

ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /home/qtxu/anaconda3/lib/python3.6/site-packages/scipy/sparse/_sparsetools.cpython-36m-x86_64-linux-gnu.so)

2 解決方案

以下操作需要root權限:

  1. 查看動態庫
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_TM_1

發現最高版本只有1.3.7,沒有1.3.9的。說明出現這些問題,是因爲升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫。

ls -l /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Sep 29  2019 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19

我們發現libstdc++.so.6是個軟連接,是連接到libstdc++.so.6.0.19上的,而libstdc++.so.6.0.19是老版本的動態庫。所以下面我們要做的就是將libstdc++.so.6連接到新版本的動態庫上去。

  1. 執行以下命令,查找編譯gcc時生成的最新動態庫:
find / -name "libstdc++.so.*"

結果如下:其中,libstdc++.so.6.0.24·就是我們的新版本的動態庫。

/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/local/hostguard/lib/libstdc++.so.6
/home/qtxu/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24
/home/qtxu/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/qtxu/anaconda3/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24
/home/qtxu/anaconda3/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/qtxu/anaconda3/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/lib/libstdc++.so.6.0.24
/home/qtxu/anaconda3/pkgs/libstdcxx-ng-7.2.0-hdf63c60_3/lib/libstdc++.so.6
/home/qtxu/anaconda3/lib/libstdc++.so.6.0.24
/home/qtxu/anaconda3/lib/libstdc++.so.6
  1. 將上面的最新目錄複製到/usr/lib64/目錄下:
cp /home/qtxu/anaconda3/lib/libstdc++.so.6.0.24 /usr/lib64/
  1. 將libstdc++.so.6連接到libstdc++.so.6.0.24上去:
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.24 libstdc++.so.6
  1. 默認動態庫升級完成。重新運行以下命令檢查動態庫:
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
CXXABI_1.3
CXXABI_1.3.11
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_FLOAT128
CXXABI_1.3.9
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.8
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.10
CXXABI_1.3.3

可看到確實是連接到新的動態庫1.3.11上去了。完成!

3 參考:

  • 《報錯信息ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9’ not found (required by…)》https://blog.csdn.net/zhuiqiuzhuoyue583/article/details/80150207
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章