运行YOLO报错,ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

前言:

运行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环境:

扫描二维码关注公众号,回复: 17019171 查看本文章
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. 更新库后,重启您的环境以使更改生效。

如果上述方法仍然没有解决问题,可能需要更深入地调查系统和环境设置,以找出导致问题的原因。

法二:

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

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

至此,问题解决!

成功运行YOLOv7中test.py:

 如图所示,运行结果保存在runs/test/exp中。

PS:运行前,记得修改test.py中的参数,如下图。

参考文章:ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found - 知乎

猜你喜欢

转载自blog.csdn.net/weixin_45819759/article/details/132408691