1. 问题现象
在 linux 环境下运行某些程序或动态库时,可能会遇到如下报错:
./your_program: /lib/x86_64-linux-gnu/libstdc++.so.6: version `cxxabi_1.3.8' not found (required by ./your_program)
该错误表示程序运行时依赖的 libstdc++.so.6 版本过低,缺少 cxxabi_1.3.8 符号版本。常见于使用较新 gcc 编译的程序,在较旧系统(如 centos 7、ubuntu 16.04 等)上运行。
2. 原因分析
cxxabi_1.3.8 是 libstdc++ 动态库导出的符号版本之一,由 gcc 4.9 开始引入。若系统自带的 libstdc++.so.6 版本较旧,就无法提供该符号,导致动态链接失败。
可通过以下命令查看当前系统 libstdc++.so.6 支持的符号版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep cxxabi
如果输出中没有 cxxabi_1.3.8,则说明版本过低。
3. 解决方案
3.1 升级系统 gcc / libstdc++
最直接的方式是升级系统的 gcc 工具链,使 libstdc++.so.6 包含所需符号版本。
ubuntu / debian:
sudo apt update sudo apt install gcc g++
centos / rhel:
sudo yum install gcc gcc-c++
升级后重新检查符号版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep cxxabi
3.2 使用高版本 libstdc++.so.6 并指定 ld_library_path
如果无法升级系统库,可以从高版本 gcc 安装目录中拷贝 libstdc++.so.6,并通过 ld_library_path 指定加载路径。
export ld_library_path=/path/to/high/version/libstdc++:$ld_library_path
例如,使用 anaconda 自带的较新 libstdc++:
export ld_library_path=/opt/anaconda3/lib:$ld_library_path
3.3 使用 conda 环境
通过 conda 创建独立环境,安装较新的 gcc 或 libstdc++-ng:
conda create -n myenv python=3.8 conda activate myenv conda install libstdcxx-ng
然后在 conda 环境中运行程序,即可使用较新的 libstdc++.so.6。
3.4 静态链接 libstdc++
如果程序源码可重新编译,可考虑静态链接 libstdc++,避免运行时依赖系统动态库:
g++ -static-libstdc++ -static-libgcc your_program.cpp -o your_program
4. 验证
运行以下命令确认问题已解决:
ldd your_program | grep libstdc++
同时再次运行程序,确认不再出现 cxxabi_1.3.8 not found 报错。
5. 总结
cxxabi_1.3.8 not found 的本质是系统 libstdc++ 版本过低。优先升级系统 gcc;无法升级时,可通过 ld_library_path 指定高版本库、使用 conda 环境或静态链接等方式解决。
到此这篇关于linux报错version `cxxabi_1.3.8‘ not found的原因分析与解决方案的文章就介绍到这了,更多相关linux报错version `cxxabi_1.3.8‘ not found内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论