默认情况下centos6.5自带的glibc版本为glibc-2.12,很多运行在centos上的应用需要高版本glic才能成功编译和安装,下面一起来升级至glibc-2.18版本吧。

必读

glibc是centos非常底层的基础程序,如果升级失败可能会导致基础命令不好用的情况,千万不要直接退出窗口,这样你就连不进来了。按照解决问题的思路进行处理即可。如果升级失败,先尝试还原glibc,实在不行在重新安装操作系统。如果有快照,建议使用快照进行恢复。

准备

查询当前版本

> strings /lib64/libc.so.6 |grep GLIBC_

点击​​http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz​​下载glibc-2.18.tar.gz源码包

安装

将 glibc-2.18.tar.gz上传到centos系统中,运行如下命令,安装过程比较长,预计十分钟。安装之后也可能会遇到其他问题,可以先看看后面的问题解决方法。防止措手不及。

> tar -zxvf glibc-2.18.tar.gz 
> cd glibc-2.18
> mkdir build
> cd build
> ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
> make -j4
> make install

验证

> ldd --version
> strings /lib64/libc.so.6 |grep GLIBC_

结果

CentOS6.5升级glibc-2.18_glibc库升级

验证版本信息是否为2.18

CentOS6.5升级glibc-2.18_glibc库升级_02

解决问题

export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
LD_PRELOAD=/lib64/libc-2.18.so rm -f /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.18.so ln -s /lib64/libc-2.18.so /lib64/libc.so.6

make install 之后可能会遇到以下问题:

make[1]: *** [install] Segmentation fault

error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

一但上面两个问题出现,你会发现基本命令也失效了。这是因为/lib64/libc.so.6 这个文件已经在安装过程中被改变了。因此,你先尝试运行如下,让你的环境变量和你现在的glibc保持一致:

> LD_PRELOAD=/lib64/libc-2.12.so rm -f /lib64/libc.so.6
> LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

然后在尝试基本命令是否正常,如果基本命令正常,验证下glibc是否升级成功。如果很不幸你的glibc升级失败了,继续尝试以下命令,将glibc还原到之前的版本:

> LD_PRELOAD=/lib64/libc-2.12.so rm -f /lib64/libc.so.6
> LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

然后在继续尝试基础命令是否好用。基础命令好用之后,继续排查你在升级过程中遇到的问题即可。思路是临时加载之前好用的库文件,然后使用库文件即可恢复系统。