本文檔適用於安裝glibc-2.14及以上版本的安裝。
- 下載安裝文件
安裝文件都在官網http://ftp.gnu.org/gnu/glibc/ 這裏可以找到你想要的版本,可自行下載,示例:wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz - 安裝檢查
爲了防止安裝不可用,導致系統奔潰,建議先做機器檢查,備份相關數據。
運行strings /lib64/libc.so.6 查看該so指向哪個版本。本人的so指向2.12,ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 13 Mar 24 2015 /lib64/libc.so.6 -> libc-2.12.so
這樣可以得到相關的恢復命令,請使用絕對路徑:LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
- 安裝命令
由於這個命令非常底層,是C語言的運行庫,因此需要用root來安裝。- 下載完壓縮包之後,解壓壓縮包: tar xfz glibc-2.17.tar.gz
- 進入目錄: cd glibc-2.17
- 創建build目錄並進入該目錄: mkdir -p build; cd build
- 運行configure命令: ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
這裏可能會遇到一個錯誤:
These critical programs are missing or too old:make
這個錯誤的原因通常是因爲make的版本太高了,可檢查下make的版本是多少,如果太高了,需要安裝一個低版本的make,繼續安裝。具體版本的要求,請參考../configure的代碼,可用vim打開該文件,自行查看源碼。 - 運行make命令,如果想並行,可以指定-j,數量爲機器的cpu核數,如4核,即make -j4,八核即make -j8 如果串行的話,就直接make
這裏可能會遇到錯誤:
dynamic-link.h: 161: elf_get_dynamic_info:Assertion `info[15] == ((void *)0)' failed
網上搜羅了一堆信息也沒有確定的解決方案,我的解決辦法是升級了gcc的版本到gcc 5.3,因爲我自己的gcc版本不高,可自行檢查相關的版本。 - 運行安裝命令: make install
- 檢查安裝
- 如果安裝成功,那麼運行ls命令,應該能直接顯示該目錄下的文件,如果有報錯,類似“ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument”,這就說明有錯誤了,安裝失敗。可使用步驟1的恢復命令,進行恢復。一旦安裝失敗,請不要斷開ssh,否則再也無法登錄進去了。
- 檢查版本是否正確,運行命令: strings /lib64/libc.so.6 | grep GLIB
strings /lib64/libc.so.6 | grep GLIB
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE這裏顯示了2.17即表示安裝成功了。
參考資料