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

  • 相关阅读:
    oracle的安装与plsql的环境配置
    Working with MSDTC
    soapui-java.lang.Exception Failed to load url
    Oracle 一个owner访问另一个owner的table,不加owner
    Call API relation to TLS 1.2
    Call API HTTP header Authorization: Basic
    VS2008 .csproj cannot be opened.The project type is not supported by this installat
    The changes couldn't be completed.Please reboot your computer and try again.
    Create DB Table View Procedure
    DB Change
  • 原文地址:https://www.cnblogs.com/joshua317/p/6951258.html
Copyright © 2011-2022 走看看