誤刪除libc.so.6的解決

最近安裝一個軟件須要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

相關文章
相關標籤/搜索