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

当在安装某些库的时候,会遇到这么一个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.

  1. 需要找到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
  1. 这里可以看到我的系统里libc.so连接的是2.23的版本的glibc
  2. 然后我就会想更新一下这个库了,常规操作应该是,下载更新版本的库,删掉这个连接,重新建立一个连接
$ sudo rm libc.so.6
$ sudo ln -s libc-2.27.so libc.so.6
  1. 当我这么操作的时候,我发现我掉进了一个坑里,当我删掉libc.so.6这个连接之后,然后再建立连接的时候 ,我得到了这么一个错误,并且我几乎所有的命令都不能用了,甚至当桌面锁定后,我都无法打开桌面。wtmfk。
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
  1. 于是开始了漫漫度娘路。结论是由于系统大量的命令都依赖这glibc,所以当删掉这个libc的连接之后,系统直接半瘫痪,相当于自宫了。
  2. 接着在茫茫大婶的贴子中查找如何恢复系统,如何升级这个glibc
  3. 第一个方法,也是网上大量文章推荐的方法,但是我没有成功
//恢复之前的连接的方法
$ 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目录。

  1. 第二个方法,使用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都已经失效了。
我们需要下一个办法来拯救电脑。

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

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

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

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

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Ubuntu系统libc.so.6是C标准库的主要库文件之一,它通常位于/lib/x86_64-linux-gnu/目录下。你可以通过以下步骤来下载libc.so.6: 1. 打开终端。 2. 使用以下命令检查当前系统中是否已经安装了libc.so.6: ``` ls -l /lib/x86_64-linux-gnu/libc.so.6 ``` 如果文件存在,则表示已经安装了libc.so.6。 3. 如果文件不存在,你可以尝试使用以下命令重新安装libc.so.6: ``` sudo apt-get install --reinstall libc6 ``` 这将重新安装libc6包,其中包含了libc.so.6文件。 请注意,根据你的系统版本和配置,libc.so.6的位置可能会有所不同。因此,如果上述方法无法解决问题,请根据实际情况进行调整。 #### 引用[.reference_title] - *1* [ubuntu系统libc.so.6 版本升级遇到的各种,以及最终解决办法](https://blog.csdn.net/y364557515/article/details/98489566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [2021-03-18 关于ubuntulibc.so.6的新和误删操作解决](https://blog.csdn.net/darren2015zdc/article/details/114987100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Linux当前使用的libc版本下载](https://blog.csdn.net/SweeNeil/article/details/83744069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值