GLIBC_2.xx not found(GLIBC升級)

系統默認一般是2.12.我在centos上運行chromedriver的時候報了glibc_2.14和2.16沒找到,所以要升級.下面是參考文檔:

場景需求

默認的Centos6.5 glibc版本最高爲2.12, 而在進行Nodejs開發時項目所依賴的包往往需要更高版本的glibc庫支持, 因此在不升級系統的前提下, 需要主動更新系統glibc庫. 一般遇到錯誤libc.so.6: version GLIBC_2.14 not found時表示需要對glibc進行升級了.

glibc版本

查看系統glibc庫版本可使用如下命令:

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

Centos6.5輸出如下glibc版本列表, 從此圖可以看出系統最高支持glibc的2.12版本: glibc-2.12 另外, 執行$ ll /lib64/libc**可以看到此時的libc.so.6是libc-2.12.so的別名, 如下圖所示: glibc-2.12-ll

glibc安裝

首先, 點擊此處下載glibc點擊下載, 得到glibc-2.14.tar.gz使用如下命令解壓glibc-2.14.tar.gz:

$ tar -xzvf glibc-2.14.tar.gz

當前目錄下得到目錄glibc-2.14, 執行$cd glibc-2.14命令進入目錄, 依次執行如下命令編譯安裝glibc-2.14:

$ mkdir build	// 在glibc-2.14目錄下建立build文件夾
$ cd build		// 進入build目錄
$ ../configure --prefix=/opt/glibc-2.14 // 配置glibc並設置當前glibc-2.14安裝目錄
$ make && make install		// 編譯安裝glibc-2.14庫

glibc軟鏈

安裝完成後, 建立軟鏈指向glibc-2.14, 執行如下命令:

$ rm -rf /lib64/libc.so.6 			// 先刪除先前的libc.so.6軟鏈
$ ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

注意

刪除libc.so.6之後可能導致系統命令不可用的情況, 可使用如下方法解決:

$ LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so  ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

如果上述更新失敗可使用如下命令還原:

$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6    // libc-2.12.so 此項是系統升級前的版本

感謝丁文翔 <[email protected]>指出本文遺漏事項!

此時查看系統glibc版本如下圖所示: glibc

這裏要注意,當我執行rm -rf /lib64/libc.so.6後,所有系統命令會失效,而且會報如下錯。這裏參考資源裏原作者也給到了:
whoami: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
logger: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

所以這裏敲黑板,一般用軟鏈接直接過去沒用,用以下方法:

$ LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so  ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
如果上述更新失敗可使用如下命令還原:

$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6    // libc-2.12.so 此項是系統升級前的版本
因爲是服務器,筆者確實也嚇倒了。然後其實我應該直接裝2.16:
LD_PRELOAD=/opt/glibc-2.16/lib/libc-2.16.so  ln -s /opt/glibc-2.16/lib/libc-2.16.so /lib64/libc.so.6
有次筆記運行這個命令失敗,進去找發現沒有libc-2.16.so,所以重新編譯的。
http://ftp.gnu.org/gnu/glibc/glibc-ports-2.16.0.tar.gz

下面是兩篇參考鏈接:
https://www.cnblogs.com/fyc119/p/6954742.html
https://cnodejs.org/topic/56dc21f1502596633dc2c3dc

 

發佈了67 篇原創文章 · 獲贊 27 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章