运行YOLOv7的test.py时遇到的问题,本以为很好解决,没想到弄了这么久。
如下图,这个错误通常是因为您的系统中缺少libstdc++.so.6
库的GLIBCXX_3.4.29
版本,而某个软件包或库需要这个特定版本的库才能正常运行。
输入如下linux命令查看是否缺失文件(一般来讲肯定是缺失的)
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
从图中有看出确实有缺失。
1.更新系统:首先,确保您的操作系统已经更新到最新版本。使用适当的命令,例如:
对于Ubuntu/Debian系统:
sudo apt update
sudo apt upgrade
对于CentOS/RHEL系统:
sudo yum update
2.更新Conda环境:您的问题中显示的错误是在Miniconda的Python环境中出现的。尝试更新您的Conda环境:
conda update --all
3.更新libstdc++.so.6:如果上述步骤没有解决问题,您可以尝试更新libstdc++.so.6
库。您可以通过以下方式尝试:
对于Ubuntu/Debian系统:
sudo apt install libstdc++6
对于CentOS/RHEL系统:
sudo yum install libstdc++.so.6
更新库后,重启您的环境以使更改生效。
如果上述方法仍然没有解决问题,可能需要更深入地调查系统和环境设置,以找出导致问题的原因。
1.使用如下linux命令查看当前系统中是否有其他同类型的文件,找一个版本较高的。
sudo find / -name "libstdc++.so.6*"(注意这个命令需要权限,可以退出当前的账号进入管理员账户弄,但我的账号虽权限不够但也能查看?)
如图,可以看到有更高版本的同类型文件
然后使用如下linux命令查看这个文件中是否包含需要的版本。
strings /home/lihao/miniconda3/envs/python39/lib/libstdc++.so.6.0.29 | grep GLIBCXX
(python39是我创建的conda环境名称,路径不要选错),结果如图。
2.如上图所示,里面包含有我们需要的版本。然后进行如下操作
①将这个文件复制到自己项目路径上。
使用如下linux命令复制文件。
cp /home/lihao/miniconda3/envs/python39/lib/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/
这里面有前后两个路径需要注意,cp命令的第一个参数为图3中标出的路径+文件名,第二个参数为图1中标出的路径,不要选错了,网上有很多解决方法并没有说清这两个路径。两个路径中间有一个空格!!
(注意在进行这一步时提示我权限不够,于是我 sudo -i 直接进入到根用户上进行操作,cd ../..这个命令为跳转到根目录)
②删除原有路径上的连接。
使用如下Linux命令删除原有路径上的连接。
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(这个路径仍然是图1中标出的路径,只不过加上了旧的文件名)
③ 建立与新文件的连接。
最后一步是创建新连接。linux命令为
sudo ln /lib/x86_64-linux-gnu/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(仍然两个路径,第一个参数为自己项目的路径+新文件名,第二个参数为自己项目上的路径+旧文件名)
至此,问题解决!
如图所示,运行结果保存在runs/test/exp中。
PS:运行前,记得修改test.py中的参数,如下图。
参考文章:ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found - 知乎