[!example] 环境
操作系统: RedHat6.5
GLIBC: 2.17
RedHat6.5 默认 glibc 版本为 2.12,需要本地编译安装升级至 2.17 版本。

1.下载离线包

glibc-2.17.tar.gz

2.编译安装

1
2
3
4
5
6
7
8
9
tar xzf glibc-2.17.tar.gz
cd glibc-2.17
# 必须要新建目录进行 configure
mkdir build
cd build
# 下面路径不要修改
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j20
make install

3.验证

1
strings /lib64/libc.so.6 | grep GLIBC

完成

[!danger] libc 故障补救措施

错误一: 其他方法覆盖了 libc.so.6 这个软链接导致系统指令不可用
错误信息: ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

适用于仅覆盖了软链接的场景:
ln -sf /usr/local/glibc-2.17/lib/lib-2.17.so /lib64/libc.so.6

恢复方法:

1
2
export LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:/usr/local/glibc-2.17
ldconfig

[!danger] 升级后 locale 报 warnning
错误信息:warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory

恢复方法:

1
2
3
4
5
6
7
ls -l /lib64/libc.so.6
# 上条命令可以查看到指向的glibc具体版本
strings /lib64/glibc-2.17.so | grep locale-archive
# 上条命令可以看到locale-archive的目录
ln -s /usr/lib/locale/locale-archive /usr/local/glibc-2.14/lib/locale/locale-archive
# 上条命令重新建立locale链接
此时locale应已恢复正常