一、问题背景
CentOS7.x由于 glicxx 库和 glic 库版本低,不能运行别的 CentOS 编译好的 C++ 程序
可通过strings /lib64/libc.so.6 | grep GLIBC_查看系统 GLIBC 支持的版本
可通过strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX查看系统 GLIBCXX 支持的版本
# ll /usr/lib64/libstdc++.so.6
# strings /lib64/libc.so.6 | grep "^GLIBC_"
# strings /usr/lib64/libstdc++.so.6 | grep "CXXABI_"
# strings /usr/lib64/libstdc++.so.6 | grep "GLIBCXX"
二、问题原因
CentOS为求稳定,其系统自带的 GLIBC 和 GLIBCXX 版本太低,软件编译时使用了较高版本,运行时不兼容导致。
GLIBC 是 GNU 发布的 C 运行库,GLIBC 是 Linux 系统中最底层的 API,几乎其它任何运行库都会依赖于GLIBC。
GLIBC 除了封装 Linux 操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
很多 Linux 的基本命令,比如cp, rm, ll,ln等,都得依赖于它,如果操作错误或者升级失败会导致系统命令不能使用,严重的造成系统退出后无法重新进入,所以操作时候需要慎重!
三、解决方法
更新 GLIBC 和 GLIBCXX,修改/usr/lib64中libstdc++.so.6链接到新库即可(GLIBC 对应/lib64/libc.so.6)
方法很多,只要该库更新到最新即可:
1.可通过手动更新 GCC,下载并编译GCC,将 GCC 升级到一定版本,替换库文件
2.可以在 CSDN 搜一下这两个库,直接下载即可,不过要一点积分
将libstdc++.so.6.0.23拷贝至/usr/lib64目录下,然后将/usr/lib64目录下的libstdc++.so.6删掉,创建软链接
# mv libstdc++.so.6.0.23 /usr/lib64/
# rm -rf /usr/lib64/libstdc++.so.6
# ln -s /usr/lib64/libstdc++.so.6.0.23 /usr/lib64/libstdc++.so.6
# strings /usr/lib64/libstdc++.so.6 | grep "CXXABI_"
四、参考
Index of /gnu/glibc
http://ftp.gnu.org/gnu/glibc
Linux中的strings命令简介
https://blog.csdn.net/stpeace/article/details/46641069
CentOS 7: libstdc++.so.6: version `CXXABI_1.3.9' not found
https://stackoverflow.com/questions/48831881/centos-7-libstdc-so-6-version-cxxabi-1-3-9-not-found
https://stackoverflow.com/questions/20357033/usr-lib-x86-64-linux-gnu-libstdc-so-6-version-cxxabi-1-3-8-not-found
libstdc++.so.6: version `CXXABI_1.3.9' not found
http://www.voidcn.com/article/p-mhupgmas-bpt.html
CentOS7.x 错误:/usr/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found
https://msd.misuland.com/pd/2884250103256715284
解决Centos下libstdc++.so.6: version `GLIBCXX_版本号' not found 和 libc.so.6: version `GLIBC_版本号' not found
https://blog.csdn.net/zhenyuhe/article/details/86737328