如何解决version `GLIBCXX_3.4.29‘ not found的问题

该问题发生在尝试运行Python程序时,由于系统libstdc++库缺少GLIBCXX_3.4.29版本导致。解决方案包括检查系统现有版本,寻找高版本库,复制到指定目录并创建新链接。在执行这些操作时,可能需要管理员权限,并注意处理权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,运行时出现的问题如下:

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/wuye/anaconda3/envs/tf2/lib/python3.8/site-packages/google/protobuf/pyext/_message.cpython-38-x86_64-linux-gnu.so)

在这里插入图片描述
这个是默认路径下的libstdc++.so.6缺少GLIBCXX_3.4.29,解决方法,如下所示:

(1)使用指令先看下系统目前都有哪些版本的

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

在这里插入图片描述
我这里只到3.28,所以确定是缺少GLIBCXX_3.4.29。
(2)来查看当前系统中其它的同类型文件,找到一个版本比较高的

sudo find / -name "libstdc++.so.6*"

请添加图片描述

在这里插入图片描述
版本比较多,就选了一个版本较高的,我这里是3.4.29,使用之前的指令看看其是否包含需要的版本:

strings /home/wuye/anaconda3/envs/tf2/lib/libstdc++.so.6.0.29 | grep GLIBCXX

在这里插入图片描述

可以看到有需要的版本,接下来就是建立新的链接到这个文件上
(3)复制到指定目录并建立新的链接

# 复制
sudo cp /home/wuye/anaconda3/envs/tf2/lib/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/
# 删除之前链接
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
# 创建新的链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/libstdc++.so.6

之后程序一般是能够成功运行的

【注意】有时候由于权限问题,我们需要查看它们的权限

ll /usr/lib/x86_64-linux-gnu/libstd*

在这里插入图片描述

### 关于GLIBCXX_3.4.29版本信息 对于GLIBCXX_3.4.29而言,这是GNU C++标准库的一个特定版本。当提及此版本时,通常是指向`libstdc++.so.6`文件中的符号表查询是否存在对应版本号的定义[^1]。 为了确认当前系统上安装的C++标准库是否支持GLIBCXX_3.4.29,可以执行如下命令来获取已安装的标准库所含有的所有GLIBCXX版本列表: ```bash strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX ``` 上述命令会打印出一系列以GLIBCXX开头的字符串,这些即为该共享对象内导出的不同版本的支持情况。如果其中包含了GLIBCXX_3.4.29,则说明当前环境中已经具备了所需的支持;反之则表示缺少必要的更新或升级[^4]。 ### 兼容性问题探讨 遇到与GLIBCXX_3.4.29有关联性的兼容性难题往往是因为应用程序依赖较新的API特性而宿主机上的C++运行时环境未能提供相应级别的实现。这种差异可能导致程序启动失败或是运行期间抛出异常错误消息指出无法找到指定版本的接口函数[^5]。 具体到实例中提到的情况——MESA-LOADER加载swrast驱动时报错缺失CXXABI_1.3.8(属于另一个系列但原理相似),这表明存在不同组件间预期使用的ABI(Application Binary Interface)版本不符的现象。这类问题不仅限于此处列举的例子,在任何跨平台开发场景下都可能出现类似的挑战。 ### 可行的解决方案 针对此类由旧版C++标准库引发的功能调用失配状况,有几种常见的处理办法可供选择: #### 方法一:通过包管理器安装最新稳定版GCC/G++ 利用Linux发行版自带的软件源直接下载并部署最新的编译工具链及其附带的核心类库能够有效缓解因本地资源陈旧带来的困扰。例如在基于RPM系统的平台上可尝试下面的操作序列完成操作: ```bash sudo yum update gcc-c++ ``` 而对于APT体系下的机器来说则是采用这样的指令集来进行同步和刷新: ```bash sudo apt-get install --only-upgrade g++ ``` 以上措施有助于确保全局范围内获得更广泛且现代化的语言特性和修复潜在的安全漏洞的同时也间接解决了部分历史遗留下来的二进制层面不一致的问题[^3]。 #### 方法二:构建独立的自定义编译环境 考虑到某些特殊场合不允许随意更改根分区内的核心设施结构或者出于隔离目的希望维持多套相互不影响的工作空间,那么借助像Conda这样的第三方虚拟化框架创建专属的Python或其他编程语言生态圈不失为一种明智之举。它允许用户灵活定制所需的各类扩展模块集合而不必担心污染原始配置状态。 不过需要注意的是这种方法虽然提供了极大的灵活性但也增加了额外的学习成本和技术栈复杂度因此需权衡利弊后再做决定[^2]。
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值