zoukankan      html  css  js  c++  java
  • 误删除libc.so.6的解决

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

    进行编译安装 glibc-2.17

    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版本,可以通过:

    strings /lib64/libc.so.6 |grep GLIBC_

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

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

    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 就又存在了。

  • 相关阅读:
    Maximum Flow Exhaustion of Paths Algorithm
    ubuntu下安装java环境
    visualbox使用(二)
    vxworks一个超级奇怪的错误(parse error before `char')
    February 4th, 2018 Week 6th Sunday
    February 3rd, 2018 Week 5th Saturday
    February 2nd, 2018 Week 5th Friday
    February 1st, 2018 Week 5th Thursday
    January 31st, 2018 Week 05th Wednesday
    January 30th, 2018 Week 05th Tuesday
  • 原文地址:https://www.cnblogs.com/joshua317/p/6951258.html
Copyright © 2011-2022 走看看