關於GLIBC_2.14 not found 版本不一致的問題解決

這幾天升級線上版本,遇到一個glibc版本不一致的問題,導致服務無法升級,坑了我好快兩天。把這個記錄下來方便其他遇到問題的小夥伴可以參考下:

1)  問題現象 :啓動的時候

         “/lib64/libc.so.6: version `GLIBC_2.14' not found (required by“

2)查看本地和線上的glibc的版本是否一致:

       ldd  --version 可以查看下本地的glibc和線上的glibc版本

由於線上機器系統版本不一樣,glibc的版本也不完全一致,一般2.12、2.14、2.17的版本比較多,高版本會兼容低版本
 

4)查看哪些函數使用了高版本的glibc

strings debug-edge | grep "GLIBC_2.14" 

在這裏可以看到是memcpy這個使用了glibc版本

或者使用readelf命令查看

 

5)常見解決辦法:

一般情況出問題的是編譯的時候用了高版本,但是線上用的是低版本的glibc。例如編譯的時候用了glibc 2.17, 線上用的版本是

glibc 2.12。

第一種:高版本函數替換

  查看程序中有哪些函數使用了高版本的glibc庫,如果僅僅只是那一兩個可以考慮其他函數替換

可以參考這篇文章:https://www.jianshu.com/p/308a4e803c81

第二種:升級glibc版本庫

1 安裝

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

tar zxvf glibc-2.14.tar.gz

cd glibc-2.14

mkdir build

cd build/

../configure --prefix=/opt/glibc-2.14

make -j4

make install

export LD_LIBRARY_PATH="/opt/glibc-2.14/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"

 

2 建立軟連接

rm -rf /lib64/libc.so.6

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

 

如果能一下升級成功那麼恭喜你,如果升級過程中遇到各種編譯問題,解決這些編譯問題說不定能折騰一整天。

建議別再升級了。我這邊解決方法是自己本地裝個低版本的centos虛擬機可能還更快點,6.9或者6.10的centos系統版本對應默認是glibc 2.12

 

       

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章