ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun

复现代码过程中,无意间出现这个问题,本以为很好解决,没想到还是花了我好几个小时的时间,总结一下趴。

我的环境是cuda11.3+python3.9+pytoch1.10

问题如图:

图1 bug示意图

在网上找了很多答案,要么就是没说清的,要么就是有问题的,我在这里总结下我的步骤。

第一步:使用如下命令查看是否缺失文件(一般来讲肯定是缺失的)

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun_第1张图片

图2 查看文件是否缺失

第二步:使用如下命令查看当前系统中是否有其他同类型的文件,找一个版本较高的。

sudo find / -name "libstdc++.so.6*"(注意这个命令需要权限,我就直接退出我的账号进入管理员账户弄了)

如图,可以看到有更高版本的同类型文件

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun_第2张图片

图3 查看是否有更高版本的文件名

然后使用如下命令查看这个文件中是否包含需要的版本。

strings /data1/liupan/anaconda3/envs/DPHSIR/lib/libstdc++.so.6.0.30 | grep GLIBCXX(DPHSIR是我创建的conda环境名称,路径不要选错),结果如图。

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun_第3张图片

图4 观察是否有所需版本

如图x所示,里面包含有我们需要的版本。然后进行如下操作

  1. 将这个文件复制到自己项目路径上。

使用如下命令复制文件。cp /data1/liupan/anaconda3/envs/DPHSIR/lib/libstdc++.so.6.0.30 /lib/x86_64-linux-gnu/

这里面有前后两个路径需要注意,cp命令的第一个参数为图3中标出的路径+文件名,第二个参数为图1中标出的路径,不要选错了,网上有很多解决方法并没有说清这两个路径。两个路径中间有一个空格!!

(注意在进行这一步时提示我权限不够,于是我 sudo -i 直接进入到根用户上进行操作,cd ../..这个命令为跳转到根目录)

图5 进入根用户上操作,并复制文件到自己项目路径

2. 删除原有路径上的连接。

使用如下命令删除原有路径上的连接。sudo rm /lib/x86_64-linux-gnu/libstdc++.so.6

(这个路径仍然是图1中标出的路径,只不过加上了旧的文件名)

3. 建立与新文件的连接。

最后一步是创建新连接。命令为

sudo ln /lib/x86_64-linux-gnu/libstdc++.so.6.0.30 /lib/x86_64-linux-gnu/libstdc++.so.6

(仍然两个路径,第一个参数为自己项目的路径+新文件名,第二个参数为自己项目上的路径+旧文件名

至此,问题解决!

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun_第4张图片

你可能感兴趣的:(linux,服务器,运维)