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