Centos6.*升级glibc过程

场景需求

默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般遇到错误libc.so.6: version GLIBC_2.14 not found时表示需要对glibc进行升级了.

glibc版本

查看系统glibc库版本可使用如下命令:

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

Centos6.5输出如下glibc版本列表, 从此图可以看出系统最高支持glibc的2.12版本:

另外, 执行$ ll /lib64/libc**可以看到此时的libc.so.6是libc-2.12.so的别名, 如下图所示:


glibc安装

首先, 点击此处下载glibc点击下载, 得到glibc-2.14.tar.gz使用如下命令解压glibc-2.14.tar.gz:

$ tar-xzvf glibc-2.14.tar.gz

当前目录下得到目录glibc-2.14, 执行$cd glibc-2.14命令进入目录, 依次执行如下命令编译安装glibc-2.14:

$ mkdir build// 在glibc-2.14目录下建立build文件夹

$ cd build// 进入build目录

$../configure--prefix=/opt/glibc-2.14// 配置glibc并设置当前glibc-2.14安装目录

$ make&&make install// 编译安装glibc-2.14库

glibc软链

安装完成后, 建立软链指向glibc-2.14, 执行如下命令:

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

****本处并未删除先前的libc.so.6软链,而是选择直接覆盖,因为直接删除libc.so.6可能会导致系统运行异常以及无法启动

注意

删除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

如果上述更新失败可使用如下命令还原:

$ LD_PRELOAD=/lib64/libc-2.12.so ln-s/lib64/libc-2.12.so/lib64/libc.so.6// libc-2.12.so 此项是系统升级前的版本

执行成功之后可执行strings/lib64/libc.so.6|grep GLIBC_ 命令 和ll /lib64/libc** 查看当前的GLIBC支持的版本和libc.so.6软链的对应情况

glibc升级引起locale警告

解决:设置语言相关的locale-archive文件

###复制到编译好的glibc 2.14的lib/locale中,记得先创建locale目录

# mkdir /opt/glibc-2.14/lib/locale

# cp /usr/lib/locale/locale-archive /opt/glibc-2.14/lib/locale/

# /usr/local/glibc-2.14/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 ##运行生成相应的locale配置文件

推荐阅读更多精彩内容