GLIBCXX_3.4.29 not found

文章讲述了在使用Python绑定如pybind11时遇到的libstdc++版本问题,解决办法是复制Anaconda环境中存在的libstdc++库或创建软链接。作者提供了详细的操作步骤。

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

参考libstdc++.so.6: version `GLIBCXX_3.4.29' not found · pybind/pybind11 · Discussion #3453 (github.com)

My ERROR was
/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found
In this case, I was able to solve the problem by copying the anaconda lib.

  1. strings /home/xx/anaconda3/envs/xx/lib/libstdc++.so.6 | grep GLIBCXX to confirm that GLIBCXX_3.4.29 exists in one of your environments.
  2. rm /lib/x86_64-linux-gnu/libstdc++.so.6
  3. cp /home/xx/anaconda3/envs/xx/lib/libstdc++.so.6 /lib/x86_64-linux-gnu

除了复制有的类似问题也可以通过建立软连接方式:

ln -s  源文件 目标文件

<think>嗯,用户遇到了Qt运行时提示缺少GLIBCXX_3.4.29库的问题,这本质上是GLIBC++库版本不兼容的典型表现。从用户提供的引用信息来看,多个案例都指向相同错误:程序编译时使用了较高版本的GCC(包含GLIBCXX_3.4.29),但运行环境的libstdc++.so.6库版本较低。 用户可能是在较新的开发环境中编译Qt程序后,部署到较旧的Linux发行版上运行。引用[1][2][3][4]都显示类似场景——比如在Ubuntu 20.04(默认GCC 9.3)编译的程序放到CentOS 7(默认GCC 4.8)运行就会触发此错误。需要特别注意Qt程序对C++标准库的强依赖特性。 解决方案需要分层次考虑:最安全的是升级目标系统的GCC运行时库,但生产环境可能受限;其次是静态链接libstdc++,但会增加体积;最彻底但最复杂的是在目标环境编译整个Qt程序。用户作为开发者可能更关注部署便捷性,因此需要提供多种选项。 技术细节上需要强调两点:1)不能简单复制so文件,需通过包管理器保证ABI兼容;2)strings命令验证版本时要注意GLIBCXX排序规则(按字母序非数字序)。引用[3]提供的命令非常关键,但用户可能忽略输出结果需要包含3.4.29才算成功。 考虑到用户使用Qt,补充说明QMAKE配置静态链接的方法会很有必要。另外conda环境引用[2][4]的案例提醒,混合使用系统GCC和conda安装的库时也可能出现此问题,需检查环境变量优先级。</think>针对Qt运行时出现`GLIBCXX_3.4.29 not found`错误,以下是系统性的解决方案: ### 问题原因 程序编译时依赖的**libstdc++库版本**高于运行环境的版本。引用[1][2][3][4]表明,该错误本质是GCC运行时库不兼容: - 编译机GCC版本 ≥ 11.1(含GLIBCXX_3.4.29) - 运行机GCC版本 < 11.1(缺少GLIBCXX_3.4.29) --- ### 解决方案 #### 方法1:升级运行环境的libstdc++(推荐) ```bash # 查看当前GLIBCXX支持版本 strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX # [^3] # 安装新版GCC运行时库(以Ubuntu为例) sudo apt install libstdc++6 # 自动升级到最新版 # 手动链接新库(若自动链接失败) sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6.<新版本号> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ``` #### 方法2:静态链接libstdc++(适用于无root权限) 在Qt项目文件(`.pro`)中添加: ```qmake # 强制静态链接C++标准库 QMAKE_LFLAGS += -static-libstdc++ ``` 重新编译后,程序将自带libstdc++,解除对系统库的依赖[^1]。 #### 方法3:在运行环境编译Qt程序 1. 在目标机器安装GCC ≥ 11.1: ```bash sudo apt install gcc-11 g++-11 # Ubuntu ``` 2. 设置Qt Kit使用新版编译器 3. 清理并重新编译项目 #### 方法4:使用兼容的Docker容器 创建包含高版本GCC的Docker镜像: ```Dockerfile FROM ubuntu:22.04 # 原生支持GLIBCXX_3.4.29 RUN apt update && apt install -y qt6-base ``` --- ### 验证修复 ```bash # 查看GLIBCXX_3.4.29是否可用 strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.29 # 检查Qt程序依赖库 ldd your_qt_app | grep libstdc++ ``` > **关键提示**: > - 避免手动复制`.so`文件,可能导致ABI不兼容[^1] > - Conda用户需运行:`conda install libgcc` 更新环境内库[^2][^4] > - 企业环境建议使用**相同OS版本**的编译机和运行机 --- ### 相关问题 1. 如何查看Linux系统已安装的GLIBCXX版本? 2. 静态链接libstdc++会对Qt程序性能产生什么影响? 3. 在Docker中部署Qt应用需要注意哪些依赖问题? [^1]: 引用自libstdc++版本验证及rpm查询案例 [^2]: 引用自Conda环境GLIBCXX缺失错误 [^3]: 引用自GLIBCXX版本检查命令 [^4]: 引用自Protobuf库引发的GLIBCXX兼容性问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值