1. 程式人生 > >Centos6.5升級glibc解決“libc.so.6: version GLIBC_2.14 not found”報錯問題

Centos6.5升級glibc解決“libc.so.6: version GLIBC_2.14 not found”報錯問題

一、問題描述

最近在Centos6.5伺服器上配置Android打包伺服器,打包執行到aapt時遇到如下報錯: 
aapt: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by aapt)

從上面報錯可以看出,程式執行時候,沒有找到“GLIBC_2.14”這個版本庫,而預設的Centos6.9 glibc版本最高為2.12, 所以需要更新系統glibc庫。

glibc是gnu釋出的libc庫,即c執行庫,glibc是linux系統中最底層的api,幾乎其它任何執行庫都會依賴於glibc。glibc除了封裝linux作業系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。

很多linux的基本命令,比如cp, rm, ll,ln等,都得依賴於它,如果操作錯誤或者升級失敗會導致系統命令不能使用,嚴重的造成系統退出後無法重新進入,所以操作時候需要慎重。 

二、檢視系統版本和glibc庫版本

我們可以使用命令檢視Linux系統版本和glibc庫版本

# cat /etc/redhat-release 
CentOS release 6.5 (Final)

# strings /lib64/libc.so.6 |grep GLIBC_ 
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_PRIVATE

由上面的資訊可以看出系統是CentOS 6.5,最高支援glibc的版本為2.12,而Android打包使用的aapt需要2.14版本,所以需要升級。

三、下載GCC2.14編譯並升級

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz 
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz 
tar -xvf  glibc-2.14.tar.gz 
tar -xvf  glibc-ports-2.14.tar.gz
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-2.14/build
cd glibc-2.14/build 
../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install

glibc-2.14.tar.gz是gcc 2.14原始碼,glibc-ports-2.14.tar.gz包括gcc 2.14所有補丁原始碼。

如果執行以上命令完成不報錯的話,檢視庫檔案,發現/lib64/libc.so.6軟連結指向了2.14版本

# ll /lib64/libc.so.6 
/lib64/libc.so.6 -> /lib64/libc-2.14.so

四、確認glibc版本升級成功

# strings /lib64/libc.so.6 |grep GLIBC_
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_PRIVATE

可以看到glibc支援的版本已經到2.14。至此,我們再次進行Andnroid打包執行程式aapt就不會再報"libc.so.6: version GLIBC_2.14 not found"的錯誤了。

結束!