无root权限,解决conda环境的报错ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
网上的方法都需要sudo或者root权限,但是服务器多是实验室公用,没有ruuto权限,因此更好的办法是通过conda只改自己虚拟环境的环境变量。
问题原因
问题的根本原因是Linux系统没有GLIBCXX_3.4.30动态链接库。
这个库和gcc版本有关。
因此要么你更换版本,要么找一个别的so链接到这个连接上(听不懂直接下章实操)。
AI解释的,比我说的好:这个错误消息表明系统找不到名为 libstdc++.so.6 的共享库,其版本为 glibcxx_3.4.30。这可能是因为您的系统上缺少此共享库,或者因为您的应用程序需要的版本与您系统上安装的版本不匹配。您可以尝试更新您的系统上的 libstdc++.so.6 库或重新安装相应的依赖包。如果你使用conda管理环境,就需要在conda环境中更新这个库或者重新安装。
解决方法
下载/找到对应的库
- 下载最新的gcc(我未验证,因为我的conda环境内有这个so了)
conda install -c conda-forge gcc
- 使用全局搜索找到这个库
# 注:2>/dev/null会排除permission denied输出
find / -name "libstdc++.so.6*" 2>/dev/null
# 示例输出
# XXXXXX
# /home/xxx/packages/anaconda3/envs/xxx/lib/libstdc++.so.6.0.32
# XXXXXX
备注:如果是GLIBCXX_3.4.30 not found,需要libstdc++.so.6.0.30以上的版本,这里我使用的6.0.32。
- 查看so有没有我们缺失的GLIBC_xxx
strings 路径/xxx.so.版本 | grep GLIBC
# 示例输入(就是把刚刚查找到的copy过来)
# strings /home/xxx/packages/anaconda3/envs/xxx/lib/libstdc++.so.6.0.32 | grep GLIBC
#
# 示例输出
#GLIBCXX_3.4
#GLIBCXX_3.4.1
#....
#GLIBCXX_3.4.30
#GLIBCXX_3.4.31
#GLIBCXX_3.4.32
#GLIBC_2.2.5
#GLIBC_2.3
#GLIBC_2.6
#......
可以看到有我们缺失的GLIBCXX_3.4.30,然后进行下一步
配置conda虚拟环境变量
conda中有一个工具叫做
conda env
,使用此可以只改动自己虚拟环境的环境变量,当切换其他环境后此环境变量会自动取消。
- 只要前文co库的路径/XXXXX/lib/加到环境变量里面就可以
conda env config vars set LD_LIBRARY_PATH="/XXXXX/lib/"
# 示例
# conda env config vars set LD_LIBRARY_PATH="/home/xxx/packages/anaconda3/envs/xxx/lib/"
- 输入完成后会提示:
To make your changes take effect please reactivate your environment
直接输入conda activate 环境名称
即可。
附:
- 查看当前添加了的路径
conda env config vars list
- 取消某个变量
conda env config vars unset 变量的名字