试图运行程序,提示”libc.so.6: version `GLIBC_2.14’ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的。以下在centos 6.7测试升级GLIBC。
1、可通过以下命令查看GLIBC的目前版本:
$ 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,。
2、升级GLIBC
(1)可以从http://ftp.gnu.org/gnu/glibc/ 下载glibc源码,这里我下载了glibc-2.14.tar.gz,将其解压到/usr/local/soft文件夹下。
(2)在glibc的解压目录构建编译目录
$ cd /usr/local/soft/glibc-2.14
$ mkdir build
$ cd build
(3)运行configure配置,编译安装
$ ../configure --prefix=/usr/local/soft/glibc-2.14
$ make -j4
$ make install
注:如果make install报错,类似两个文件相同,可以尝试使用以下命令安装:
$ make install -k -i
(4) 替换glibc共享库
glibc安装完成以后会生成新版本的共享库,位于/usr/local/soft/glibc-2.14/lib/libc-2.14.so,现在需要将系统的lib64目录下的libc.so.6软连接到该共享库。如果直接删除libc.so.6将会导致ln、cp、move等命令全部失效,并且报错:
$ error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
好在有个LD_PRELOAD解决这个问题:
先删除连接 :
# cd /lib64
# LD_PRELOAD=/usr/local/soft/glbc-2.14/lib/libc-2.14.so rm libc.so.6 -->我可以正常删除,这一步省略,不能正常删除的,先执行该步
建立新连接 :
# LD_PRELOAD=/usr/local/soft/glbc-2.14/lib/libc-2.14.so ln -s /usr/local/soft/glbc-2.14/lib/libc-2.14.so libc.so.6
(5) 检查glibc版本
在运行strings命令查看glibc版本,发现已经有2.14了。
$ 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