Python ImportError: libstdc++.so.6: version `GLIBCXX_3.4.29’ not found
在使用Python编写或运行时,有时会遇到类似于ImportError: libstdc++.so.6: version GLIBCXX_3.4.29’ not found`的错误。这个错误通常与系统缺少某个特定的库文件相关。
在使用Python编写或运行时,有时会遇到类似于ImportError: libstdc++.so.6: version GLIBCXX_3.4.29’ not found`的错误。这个错误通常与系统缺少某个特定的库文件相关。
问题原因
libstdc++.so.6是GNU C标准库的共享对象文件。它包含了许多C的标准函数和类实现,供C程序使用。当我们导入需要依赖C库的Python模块时,Python解释器会尝试动态链接到系统中的libstdc++.so.6库文件。
然而,如果系统中没有找到libstdc++.so.6文件,或者找到的版本不符合Python模块的要求(如缺少GLIBCXX_3.4.29版本),就会导致ImportError错误。
解决方法
方法1:安装/更新 libstdc++6 库
最简单的解决方法是安装正确版本的C++库。我们可以使用系统的包管理器(如apt、yum、brew等)来安装相应的库文件。
例如,在Ubuntu上,我们可以使用以下命令安装C++标准库:
sudo apt update
sudo apt install libstdc++6
这个命令会安装libstdc++.so.6文件,并确保它的版本符合Python模块的要求。
但是在我的环境上,执行上述命令后还是不起作用。这时,可以尝试方法2。
方法2:拷贝+软链接方式
当前程序运行的ENV环境查看GLIBCXX版本
在 Anaconda3 中打开我们当前程序所使用的虚拟环境,如 test_3_10。
source activate test_3_10
进入虚拟环境的lib目录,查看当前虚拟环境中 GLIBCXX 的版本。
cd /data/anaconda3/envs/test_3_10/lib
strings libstdc++.so.6 | grep GLIBCXX
可以看到不存在我们所需要的文件 GLIBCXX_3.4.29
,所以导致了我们前面的报错。
全局查看是否存在高版本的GLIBCXX
先全局查看系统下同类型文件,存在的高版本文件
find / -name "libstdc++.so.6*"
只要出现了大于等于所需版本的文件,任意选择一个即可,如:
可以看到目录 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
下存在高版本的GLIBCXX文件,正是我们所需要的。
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
目录/usr/lib/x86_64-linux-gnu
下再次查看并确认GLIBCXX版本
接着,我们可以在 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
目录下查找 GLIBCXX:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
输出如下:
可以看到 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
下存在高版本的GLIBCXX文件(GLIBCXX_3.4.29、GLIBCXX_3.4.30)。
这时,我们只需要将文件拷贝到我们使用的虚拟环境 test_3_10 中,并建立软链接即可。具体命令如下:
# 拷贝文件
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 /data/anaconda3/envs/test_3_10/lib
# 删除原链接
rm /data/anaconda3/envs/test_3_10/lib/libstdc++.so.6
# 建立新的连接
ln -s /data/anaconda3/envs/test_3_10/lib/libstdc++.so.6.0.30 /data/anaconda3/envs/test_3_10/lib/libstdc++.so.6
配置好后,再次进入虚拟环境的lib目录,查看当前虚拟环境 test_3_10 中 GLIBCXX 的版本。
cd /home/xxx/anaconda3/envs/test_3_10/lib
strings libstdc++.so.6 | grep GLIBCXX
输出如下:
可以看到,已经成功地将 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
目录的GLIBCXX文件拷贝至我们程序运行的虚拟环境 test_3_10 中。
大功告成!
参考博客
更多推荐
所有评论(0)