更新时间:2024/08/25
系统架构
Linux localhost.localdomain 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
问题描述
一个d22c.cpp的cpp文件,用g++编译执行,报错如下:
./d22c: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)
看到这个错误,你锁定的是不是“/lib64/libc.so.6: version `GLIBC_2.18' not found ”这一串提示?于是你开始在百度上搜,可以得到如下检索:
从根源上解决libc.so.6版本问题 /lib64/libc.so.6:version 'GLIBC_XXX' not found_降低libc.so.6-CSDN博客
/usr/lib64/libc.so.6: version `GLIBC_2.32‘ not found 或其他版本-CSDN博客
解决:centos7 中node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found (required by node)-CSDN博客
解决 "/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)"-CSDN博客
gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行 版本兼容问题 - Bigben - 博客园 (cnblogs.com)
【Linux】解决误操作libc.so.6导致的问题,补充:升级glibc注意事项_libc.so.6版本不对会不能开机吗-CSDN博客
以上的解答几乎一致,都是在教你怎么升级GLIBC。如果在编译过程中加入“-static”,采用静态库确实能够规避动态链接库的问题,但动态链接库本身的问题没有解决。于是,我和大家一样,尝试在系统中加入更高版本的GLIBC,我试过GLIBC2_18、GLIBC2_19、GLIBC2_22、GLIBC2_25、GLIBC3_33等,但在编译configure的过程中无一例外都失败了,要么说你make版本太低,要么说你gcc版本太低,各种错误。然而,即使我的各种配置满足INSTALL文本里的要求,依然会无理报错,如下图所示:
人都麻了,错误疯狂套娃!-----------------------------------------------------------------------------------------------------------------------------------------------------------
对于原问题,chagpt的回答如下:
可我不会docker呀!(你怎么这么菜
)最后还是在我的两个好友的帮助下把问题解决了,解决方式如下:
本文解决方案:
我们回归到这个问题:/lib64libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6),我们只关注了括号外的文字,没有关注到括号里面的文字,我们没有想到,会不会是libstdc++.so.6软链接的问题?
/lib64文件夹下有libstdc++so.6,指向文件libstdc++.so.6.0.28
同时,/usr/local/lib64文件夹下存在文件libstdc++so.6、libstdc++so,并且libstdc++.so.6.0.28的文件大小与上述不同,猜测这个软链接出了问题。
方法一:
在/lib64文件夹下操作:
cd /lib64
sudo cp libstdc++.so.6 libstdc++.so.6.bak //先备份一下
sudo rm libstdc++.so.6 //先删除
sudo ln -s /usr/local/lib64/libstdc++.so libstdc++.so.6 //重新建立软链接,完成
注意:如果服务器重启,这个软链接要重新建立。
方法二:
我们观察到,无论在哪个文件夹,最终链接指向的都是libstdc++.so.6.0.28这个文件,因此我们只需要把/lib64文件夹下的libstdc++.so.6.0.28用/usr/local/lib64下的同名文件替换就行:
cd /lib64
sudo mv libstdc++.so.6.0.28 libstdc++.so.6.0.28.bak
cd /usr/local/lib64
sudo cp libstdc++.so.6.0.28 /lib64
完成!
你真是个小聪明!
参考链接:
解决安装高版本gcc之后运行出现/lib64/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found的问题_高版本glibstdc++-CSDN博客
gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行 版本兼容问题 - Bigben - 博客园 (cnblogs.com)