报错 GLIBCXX_3.4.30‘ not found 解决,学习记录

首先指路参考的原博客:Ubuntu系统anaconda报错version `GLIBCXX_3.4.30' not found - Angry_Panda - 博客园

本篇仅作为报错解决的学习记录。

1、首先,这个报错是什么意思?

这个错误表示你在运行 paddle 库时,libpaddle.so(PaddlePaddle 的核心动态链接库)需要的 GLIBCXX_3.4.30 版本没有在 libstdc++.so.6 库中找到。

错误分析:

1、首先查看系统目录(根目录下)下有多少个C++标准库libstdc++.so.6文件。

使用命令sudo find / -name libstdc++.so.6, 

--> 关于find命令,详见Linux中find命令用法大全 - 许卿一世长安 - 博客园

得到结果:

首先关注 (1)anaconda主环境(即base环境)的库文件夹,即anaconda3/lib;(2)我的虚拟环境pd下的lib文件夹;(3)系统环境下的lib文件夹。

!!!我们需要知道:如果你正在使用 Anaconda 环境,Anaconda 会优先使用它自己的环境路径中的库文件。即我这里/home/ubuntu2004/anaconda3/envs/pd/lib/libstdc++.so.6 会被 paddle 库优先加载,而不管其他环境下有没有符合需求的libstdc++.so.6 文件。

猜测:可能是这个库文件没有所需要的GLIBCXX_3.4.30 版本。

检验猜测:输入命令: strings /home/ubuntu2004/anaconda3/envs/pd/lib/libstdc++.so.6 | grep GLIBC

可以看到确实最高版本只有到3.4.29。所以会报错找不到,猜测正确。接下来只需要升级就好。

                在此之前,先好奇地查看下前面说的其他路径下的文件是否有所需要的GLIBCXX_3.4.30 版本:

依次输入:strings /home/ubuntu2004/anaconda3/lib/libstdc++.so.6 | grep GLIBC; strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC

得到结果如下:

可以发现anaconda的主环境下的libstdc++.so.6 库依旧没有所需版本,但系统环境下有!!

        所以,快速解决方法:通过符号链接(软连接)将虚拟环境pd中的 libstdc++.so.6 库文件直接链接到系统环境中的 libstdc++.so.6

在我的虚拟环境的lib路径下依次输入命令:

rm libstdc++.so

rm libstdc++.so.6

ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 libstdc++.so

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

# 这里的后缀0.30表示/libstdc++.so.6的第30个版本

结束,再运行之前报错的命令,完美解决!!不报错了!!!

上述软链接操作的解释(学习过程):

在/home/ubuntu2004/anaconda3/envs/pd/lib/下发现两个 libstdc++.so库文件,其中libstdc++.solibstdc++.so.6 的符号链接,GPT回答我说这个链接是为了方便不同版本的 C++ 库的兼容性管理。

直观来看,查看文件类型,SO文件没有具体的版本号,直观知道它是作为通用名称使用的,这里就是指向 libstdc++.so.6 这个有具体版本的实际库文件。怎么知道是指向libstdc++.so.6的呢?采用命令ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so

结果:

(上述的libstdc++.so.6.0.29没有显示完整路径 ,说明它是相对路径,所以就是前面图中红框内的libstdc++.so.6。)      

         然而,我查看系统环境下,发现只有libstdc++.so.6 文件,而没有libstdc++.so软链接,这是因为系统更倾向于直接使用 libstdc++.so.6 作为库的实际实现。(所以,libstdc++.so 在系统级别通常并不会直接存在。)

        我个人感觉,既然libstdc++.so是libstdc++.so.6的软连接,直接把虚拟环境下的libstdc++.so.6软连接到系统环境下的不就好了,然后libstdc++.so可以通过两次软连接同样跳到系统环境下的libstdc++.so.6。为什么要直接将libstdc++.so也直接软连接到系统环境下的libstdc++.so.6。(GPT说我这样也是可以的,那不管了)

命令行相关参数解释:

1、strings命令:linux 中 strings命令的作用和例子_linux strings-CSDN博客,注意和cat命令的区别。

2、grep文本搜索命令用法:grep命令_Linux grep命令:文本搜索工具(可使用正则表达式) - C语言中文网

3、在命令行中,| 是一个 管道符(pipe),它将前一个命令的输出传递给后一个命令作为输入。管道符的作用是将一个命令的标准输出(stdout)直接连接到另一个命令的标准输入(stdin)。

4、关于软链接(符号链接),详见:linux ln 命令使用参数详解(ln -s 软链接)_LINUX_操作系统_脚本之家

引用\[1\]:查看一下报错环境位置的libstdc++.so.6情况 strings /home/xxx/tools/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/_ext.cpython-37m-x86_64-linux-gnu.so | grep GLIBC 。 引用\[2\]:拷贝高版本的libstdc++.so到/usr/lib64目录下,并重新建立软连接 cp /root/anaconda3/envs/faceswap/lib/libstdc++.so.6.0.31 /usr/lib64/ ln -sf /usr/lib64/libstdc++.so.6.0.31 /usr/lib64/libstdc++.so.6 。 引用\[3\]:发现确实没有 version `GLIBCXX_3.4.29’ (open-mmlab) \[xxx@gpu07 mmsegmentation\]$ strings /home/xxx/tools/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/_ext.cpython-37m-x86_64-linux-gnu.so | grep GLIBC GLIBC_2.2.5 GLIBC_2.14 GLIBCXX_3.4.18 GLIBCXX_3.4.26 GLIBCXX_3.4.9 GLIBCXX_3.4 原因分析: 。 问题:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.32' not found 回答: 这个问题的原因是在报错环境中找不到`GLIBCXX_3.4.32`版本的`libstdc++.so.6`。为了解决这个问题,你可以按照以下步骤进行操作。首先,使用命令`strings /home/xxx/tools/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/_ext.cpython-37m-x86_64-linux-gnu.so | grep GLIBC`查看报错环境中的`libstdc++.so.6`的情况。然后,根据引用\[2\]的建议,将高版本的`libstdc++.so`拷贝到`/usr/lib64`目录下,并重新建立软连接。具体命令为`cp /root/anaconda3/envs/faceswap/lib/libstdc++.so.6.0.31 /usr/lib64/`和`ln -sf /usr/lib64/libstdc++.so.6.0.31 /usr/lib64/libstdc++.so.6`。最后,再次检查`libstdc++.so.6`的版本,确保已经包含了`GLIBCXX_3.4.32`。 #### 引用[.reference_title] - *1* *3* [集群报错 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found](https://blog.csdn.net/yirui50/article/details/125462458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [conda环境下“/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found”问题解决](https://blog.csdn.net/lsb2002/article/details/131456857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值