如何解决 :libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found
问题描述:
当您尝试在Linux系统上运行某个程序或软件时,有时会遇到一个错误,提示libstdc++.so.6: version GLIBCXX_3.4.30 not found。这个错误表明您的系统缺少某个特定版本的C++标准库,具体来说就是GLIBCXX_3.4.30
原因:
这个问题的原因通常是因为您的系统上安装的libstdc++版本太旧,或者您的程序需要的是一个更新版本的libstdc++
解决方案:
升级GCC
GLIBCXX_3.4.30是GCC(GNU Compiler Collection)的某个版本中的C++标准库版本。您可以通过升级GCC来获取此版本。
在基于Debian的系统(如Ubuntu)上,可以使用以下命令:
sudo apt-get update
sudo apt-get install gcc-11 g++-11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 80 --slave /usr/bin/g++ g++ /usr/bin/g++-11
sudo find / -name libstdc++.so.6
可以看到系统中C++标准库libstdc++.so.6文件有多个,基本是每个独立性较高的程序都在自己的环境路径下有个libstdc++.so.6文件,所以这样是因为不同的libstdc++.so.6文件可能内部的GLIBCXX版本并不相同,因此一些不需要从源码编译的软件就会采用这种方式,把符合自身版本需要的libstdc++.so.6文件放在自身的库路径下,这样在调用的时候会优先调用自身带有的libstdc++.so.6文件而不是系统自带的。
我们可以看下系统libstdc++.so.6文件中支持的GLIBCXX版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
我们再看下anaconda环境下libstdc++.so.6文件中支持的GLIBCXX版本:
strings /home/devil/anaconda3/envs/impala/lib/libstdc++.so.6 | grep GLIBC
可以看到系统环境下 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 文件含有GLIBCXX_3.4.30版本,而anaconda环境下/usr/lib/x86_64-linux-gnu/libstdc++.so.6文件含有的最高版本为GLIBCXX_3.4.29,因此有了前面的报错。
我们只需要将anaconda环境中libstdc++.so和libstdc++.so.6的链接地址指向系统路径中的地址即可:
ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/yourenvname/anaconda3/envs/pycode/bin/../lib/libstdc++.so.6