本文档适用于安装glibc-2.14及以上版本的安装。
- 下载安装文件
安装文件都在官网http://ftp.gnu.org/gnu/glibc/ 这里可以找到你想要的版本,可自行下载,示例:wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz - 安装检查
为了防止安装不可用,导致系统奔溃,建议先做机器检查,备份相关数据。
运行strings /lib64/libc.so.6 查看该so指向哪个版本。本人的so指向2.12,ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 13 Mar 24 2015 /lib64/libc.so.6 -> libc-2.12.so
这样可以得到相关的恢复命令,请使用绝对路径:LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
- 安装命令
由于这个命令非常底层,是C语言的运行库,因此需要用root来安装。- 下载完压缩包之后,解压压缩包: tar xfz glibc-2.17.tar.gz
- 进入目录: cd glibc-2.17
- 创建build目录并进入该目录: mkdir -p build; cd build
- 运行configure命令: ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
这里可能会遇到一个错误:
These critical programs are missing or too old:make
这个错误的原因通常是因为make的版本太高了,可检查下make的版本是多少,如果太高了,需要安装一个低版本的make,继续安装。具体版本的要求,请参考../configure的代码,可用vim打开该文件,自行查看源码。 - 运行make命令,如果想并行,可以指定-j,数量为机器的cpu核数,如4核,即make -j4,八核即make -j8 如果串行的话,就直接make
这里可能会遇到错误:
dynamic-link.h: 161: elf_get_dynamic_info:Assertion `info[15] == ((void *)0)' failed
网上搜罗了一堆信息也没有确定的解决方案,我的解决办法是升级了gcc的版本到gcc 5.3,因为我自己的gcc版本不高,可自行检查相关的版本。 - 运行安装命令: make install
- 检查安装
- 如果安装成功,那么运行ls命令,应该能直接显示该目录下的文件,如果有报错,类似“ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument”,这就说明有错误了,安装失败。可使用步骤1的恢复命令,进行恢复。一旦安装失败,请不要断开ssh,否则再也无法登录进去了。
- 检查版本是否正确,运行命令: strings /lib64/libc.so.6 | grep GLIB
strings /lib64/libc.so.6 | grep GLIB
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_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE这里显示了2.17即表示安装成功了。
参考资料