触发场景
java服务端解析apk装了apktool之后仍无法读取,看一下log发现"libc.so.6: version GLIBC_2.14 not found"
报错原因
查看服务器支持的glibc得知这台服务器最高支持2.12的,而我装的apktool这个版本需要的是2.14版本的。
glibc是啥?
glibc是gnu发布的libc库,即c运行库,glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
很多linux的基本命令,比如cp, rm, ll,ln等,都得依赖于它,如果操作错误或者升级失败会导致系统命令不能使用,严重的造成系统退出后无法重新进入,所以操作时候需要慎重。
解决办法(升级glibc)
查看服务器执行的glibc版本
[root@skr1 ~]# 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
由上可知:最高支持的是2.12版本。
下载glibc
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
编译(make较费时,耐心等待)
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
查看软链接指向
[root@skr1 build]# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Dec 5 10:08 /lib64/libc.so.6 -> libc-2.14.so
由上可见/lib64/libc.so.6软链接已经指向libc2.14版本
再次查看服务器支持的glibc版本
[root@skr1 /]# 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
搞定咯!