ubuntu系统,libc.so.6 版本升级时遇到的各种坑,以及最终解决办法

您所在的位置:网站首页 ubuntu降级libc6 ubuntu系统,libc.so.6 版本升级时遇到的各种坑,以及最终解决办法

ubuntu系统,libc.so.6 版本升级时遇到的各种坑,以及最终解决办法

2024-01-01 20:58| 来源: 网络整理| 查看: 265

当在安装某些库的时候,会遇到这么一个error

Error: Dynamic Linking Error: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.27' not found

这个错误是说libc.so.6的版本不对,找不到GLIBC_2.27这个版本的libc 可以使用如下命令查看版本

$ strings libc-2.23.so | grep GLIBC GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2.14 GLIBC_2.15 GLIBC_2.16 GLIBC_2.17 GLIBC_2.18 GLIBC_2.22 GLIBC_2.23 GLIBC_PRIVATE GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11) stable release version 2.23, by Roland McGrath et al. 需要找到libc.so.6在什么位置,全局搜一下,发现在 /lib/x86_64-linux-gnu 目录下 $ pwd /lib/x86_64-linux-gnu $ ls -la libc.so.6 lrwxrwxrwx 1 root root 12 Jan 15 2018 libc.so.6 -> libc-2.23.so 这里可以看到我的系统里libc.so连接的是2.23的版本的glibc然后我就会想更新一下这个库了,常规操作应该是,下载更新版本的库,删掉这个连接,重新建立一个连接 $ sudo rm libc.so.6 $ sudo ln -s libc-2.27.so libc.so.6 当我这么操作的时候,我发现我掉进了一个坑里,当我删掉libc.so.6这个连接之后,然后再建立连接的时候 ,我得到了这么一个错误,并且我几乎所有的命令都不能用了,甚至当桌面锁定后,我都无法打开桌面。wtmfk。 ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory 于是开始了漫漫度娘路。结论是由于系统大量的命令都依赖这glibc,所以当删掉这个libc的连接之后,系统直接半瘫痪,相当于自宫了。接着在茫茫大婶的贴子中查找如何恢复系统,如何升级这个glibc第一个方法,也是网上大量文章推荐的方法,但是我没有成功 //恢复之前的连接的方法 $ LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.23.so ln -s /lib/x86_64-linux-gnu/libc-2.23.so libc.so.6 //或者直接更新这个连接 $ LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.27.so ln -s /lib/x86_64-linux-gnu/libc-2.27.so libc.so.6

不过可以说一下这个方法的原理: linux调用so库文件的时候,搜索路径为当前路径,如果搜索不到,才转到系统lib目录。但是可以提供了一个LD_PRELOAD系统变量来改变这个顺序。设置LD_PRELOAD了后,库加载的顺序就改为:LD_PRELOAD ,当前路径,系统lib目录。

第二个方法,使用busybox,busybox是不依赖任何lib库的。但是在执行busybox的时候,遇到了权限问题。 $ busybox ln -s libc-2.27.so libc.so.6 ln: libc.so.6: Permission denied $ sudo busybox ln -s libc-2.27.so libc.so.6 sudo: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

可是我在执行删除 libc.so.6库的时候,已经sudo过了,但是这里依然报没有权限。 难道是得su超级用户了。可这时su和sudo都已经失效了。 我们需要下一个办法来拯救电脑。

第三个方法,这个方法也是拯救刚才自宫了的电脑的方法,做一个u盘启动盘,系统最好是和你电脑一样的。然后从u盘启动系统。然后找到物理磁盘中/lib/x86_64-linux-gnu,这个路径,然后建立新版libc库的连接,这里也可以恢复之前的连接。

这个方法我也没有成功,我的库是更新成功了,但是使用ls命令直接报了核心转储。具体问题目前还不是很清楚,我下载了glibc2.27的源码,也一样报这个错误。 我还需要再专项研究一下glibc库。

总结一下:当你在看完我这边文章的时候,可以使用方法二来完成这个更新,方法就是先切换到超级用户模式,再去删除 libc.so.6库,然后使用busybox建立连接也不会有权限问题。或者使用方法三,这个是终极办法,随便你怎么去改那些文件。

更新一下glibc的下载连接 http://ftp.gnu.org/gnu/glibc/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3