最近安装一个软件须要glibc-2.17。
使用ldd --version 发现系统的glibc版本为 glibc-2.12,当时没有想到更好的方法,就尝试将系统的glibc版本修改成glibc-2.17linux
进行编译安装 glibc-2.17ui
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
错误源头:spa
当make install 完成以后,须要将 /lib64/libc.so.6 软连接更新为 /usr/local/glibc-2.17/lib/libc-2.17.so,code
因而我准备删除 /lib64/libc.so.6,而后新建一个指向/usr/local/glibc-2.17/lib/libc-2.17.so.而后我就删除了 /lib64/libc.so.6,而后,就没有而后了。。。blog
glibc:get
libc.so.6 是c运行时库 glibc的软连接,而系统几乎全部程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软连接找到glibc库。删除libc.so.6将致使系统的几乎全部程序不能工做。
每一个glibc.so文件有它支持的libc版本,能够经过:string
strings /lib64/libc.so.6 |grep GLIBC_
查看。若是程序编译的时候连接的libc库版本不在程序运行环境下的glibc库支持的libc版本以内,也会报错.
因而,系统的全部命令 ls,cp,cd 等等都没法使用了。io
解决方法,根据本身安装的状况(可能安装路径不一样):
编译
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 就又存在了。class