解决问题:/lib64libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)

更新时间: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文本里的要求,依然会无理报错,如下图所示:

NO OR error

人都麻了,错误疯狂套娃!-----------------------------------------------------------------------------------------------------------------------------------------------------------

对于原问题,chagpt的回答如下:


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

/lib64文件夹

同时,/usr/local/lib64文件夹下存在文件libstdc++so.6、libstdc++so,并且libstdc++.so.6.0.28的文件大小与上述不同,猜测这个软链接出了问题。

/usr/local/lib64文件夹下

方法一:

在/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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容