绝命一击 ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found
看看自己的 libstdc++.so.6
里是否包含了 CXXABI_1.3.8
# 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
果然没有。
注意,不一定是GCC
版本过低,用SCL(关于scl https://linux.cn/article-6776-1.html ) 升级GCC毛用都没有,根本不能升级 libstdc++.so.6
所以我们要升级 libstdc++.so.6
,顺便升级GCC。如果只升级GCC(通过scl)是无效的,因为gcc的版本高了,但是他的libstdc++
是 require的 原来的 libstdc++.so.6
。
不信你看
# cat /opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/libstdc++.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
INPUT ( /usr/lib64/libstdc++.so.6 -lstdc++_nonshared )
所以蛋疼了吧???
只有一个解决方法就是重新编译GCC。
yum install -y gmp-devel mpfr-devel libmpc-devel
命令如下:
sudo yum install gmp-devel mpfr-devel libmpc-devel -y
cd download
wget ftp://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz
xz -d gcc-9.2.0.tar.xz
tar -xf gcc-9.2.0.tar
cd gcc-9.2.0
./configure --disable-multilib --enable-languages=c,c++ --prefix=$HOME/local
make -j4
make -j install
安装完毕后,将新安装的路径加入到环境变量里。
export LD_LIBRARY_PATH=$HOME/local/lib64
可以在 ~/.bash_profile
里加上 PATH=$HOME/local/bin:$PATH
把local 放到前面,以防同时存在相同名称bin的时候,能调用本地的bin文件
把 LD_LIBRARY_PATH=$HOME/local/lib64
也加到 .base_profile
里,可以方便以后使用。
done.