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)