前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >误删除libc.so.6的解决

误删除libc.so.6的解决

作者头像
joshua317
发布2018-04-16 13:06:33
1.7K0
发布2018-04-16 13:06:33
举报
文章被收录于专栏:技术博文技术博文

最近安装一个软件需要glibc-2.17。 使用ldd --version 发现系统的glibc版本为 glibc-2.12,当时没有想到更好的方法,就尝试将系统的glibc版本修改为glibc-2.17

进行编译安装 glibc-2.17

代码语言:javascript
复制
http://ftp.gnu.org/gnu/glibc

wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
tar zxvf glibc-2.17.tar.gz
cd glibc-2.17
mkdir build
cd build
../configure --prefix=/usr/local/glibc-2.17
make -j4
sudo make install
export LD_LIBRARY_PATH=/usr/local/glibc-2.17/lib

错误源头:

当make install 完成之后,需要将 /lib64/libc.so.6 软链接更新为 /usr/local/glibc-2.17/lib/libc-2.17.so,

于是我准备删除 /lib64/libc.so.6,然后新建一个指向/usr/local/glibc-2.17/lib/libc-2.17.so.然后我就删除了 /lib64/libc.so.6,然后,就没有然后了。。。

glibc:

libc.so.6 是c运行时库 glibc的软链接,而系统几乎所有程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软链接找到glibc库。删除libc.so.6将导致系统的几乎所有程序不能工作。 每个glibc.so文件有它支持的libc版本,可以通过:

代码语言:javascript
复制
strings /lib64/libc.so.6 |grep GLIBC_

查看。如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库支持的libc版本之内,也会报错. 于是,系统的所有命令 ls,cp,cd 等等都无法使用了。

解决方法,根据自己安装的情况(可能安装路径不同):

代码语言:javascript
复制
LD_PRELOAD=/usr/local/glibc-2.17/libc-2.17.so ln -s /usr/local/glibc-2.17/libc-2.17.so /lib64/libc.so.6

LD_PRELOAD的解决原理是,linux调用so库文件时,先搜索当前路径,然后是系统库目录,提供LD_PRELOAD系统变量可以改变这个顺序,改变后的搜索顺序为 LD_PRELOAD, 当前路径, 系统库目录。 于是,使用LD_PRELOAD指向正常的glibc库文件,然后执行ln等命令,就可以正常执行,执行成功之后, libc.so.6 就又存在了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档