glibc 安裝升級


1.檢查系統是否支持glibc_2.14

centos7.3之前的版本,最高版本是glibc-2.12,centos7.3之后yum 默認安裝的是glibc-2.17,是支持gGLIBC_2.14的

執行如下命令檢查系統是否支持GLIBC_2.14

strings /lib64/libc.so.6 |grep GLIBC_2.14

2.編譯安裝glibc

wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.14.1.tar.gz 
tar xf glibc-2.14.tar.gz 
cd glibc-2.14 
mkdir build 
cd build 
../configure –-prefix=/opt/glibc-2.14    (configure –prefix=/usr/local/glibc-2.14 –disable-profile –enable-add-ons –with-headers=/usr/include –with-binutils=/usr/bin)

make -j4

make install #編譯時間不短,最后會報一個文件沒找到的錯誤,不要擔心

 (這里路徑安裝2.17 的時候設置的 –-prefix=/usr ,結果掛掉了,導致所有命令都無法執行,比如不小心把軟連接libc.so.6刪除了,只要執行ldconfig -l -v /lib64/libc-2.17.so即可恢復libc.so.6。(假設usr/lib64/libc.so.6 -> libc-2.17.so)

  LD_PRELOAD=/usr/local/glibc-2.17/build/libc.so  ln -sf /usr/local/glibc-2.17/lib/libc-2.17.so /lib64/libc.so.6

在make install過程中出現如下錯誤:

Can’t open configuration file /opt/glibc-2.14/etc/ld.so.conf: No such file or directory

就是缺少了必要的編譯文件 ld.so.conf。通過 find 命令找到對應的文件位置。

[root@localhost build]# find / -name "ld.so.conf" /etc/ld.so.conf 

然后我們執行命令把此文件拷貝到對應的文件目錄下去,然后繼續編譯。

[root@localhost build]# cp /etc/ld.so.conf /opt/glibc-2.14/etc/ [root@localhost build]# make install Congratulations! 編譯成功!

3.檢查是否編譯成功

ls /opt/glibc-2.14/lib/libc-2.14.so

4.替換舊的glibc-2.12.so

rm -rf /lib64/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

 

這一步可以這樣解決:export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

 

如不小心把軟連接libc.so.6刪除了,只要執行ldconfig -l -v /lib64/libc-2.17.so即可恢復libc.so.6。(假設usr/lib64/libc.so.6 -> libc-2.17.so)

5.檢查是否替換成功

strings /lib64/libc.so.6 |grep GLIBC_2.14

6.替換glibc之后衍生的其他問題 
(1)系統時間被改變

系統時間的具體地址由libc.so.6這個庫決定,升級前,centos的默認時區文件為/etc/localtime。而我新編譯的庫時,設置了–prefix=/usr/local/glibc-2.14,導致默認路徑為變成了/usr/local/glibc-2.14/etc/localtime,執行如下命令修改默認時區的路徑

ln -sf /etc/localtime /usr/local/glibc-2.14/etc/localtime

(2)登錄報如下警告

-bash: warning: setlocale: LC_CTYPE: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_COLLATE: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_TIME: cannot change locale (EN_US.UTF-8): No such file or directory

解決辦法

1.cat > /etc/environment << EOF 
LANG=en_US.utf-8 
LC_ALL= 
EOF 
2. source /etc/environment 
3. localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

問題一:比如不小心把軟連接libc.so.6刪除了,只要執行ldconfig -l -v /lib64/libc-2.17.so即可恢復libc.so.6。(假設usr/lib64/libc.so.6 -> libc-2.17.so)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM