解决 /lib/libc.so.6: version `GLIBC_2.11′ not found

时间:2020-12-25 06:59:52


由于其他软件需要更高级的glibc 所以升级如下:

首先用centos的yum升级glibc库

yum update glibc

但问题依旧。用命令查看glibc库的信息

rpm -qi glibc

显示系统的glibc库版本为2.5

在CentOS中用更新命令到2.5已经是最新版本了(yum不能更新到指定版本),只好手动下载 glibc 2.11的源码包编译安装更新:

地址:http://ftp.gnu.org/pub/gnu/glibc/glibc-2.11.tar.gz


cd /usr/src 

mkdir glibc-2.11-build 

wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.11.tar.gz 

tar zxvf glibc-2.11.tar.gz 

cd /usr/src/glibc-2.11-build/ 

export CFLAGS="-g -O2 -march=i686"

/usr/src/glibc-2.11/configure --prefix=/usr/src/glibc-2.11-build/ --with-headers=/usr/include

make 

make install

注意:

1.   在目录usr/src/glibc-2.11执行configure命令时不能执行,需在外部文件夹glibc-2.11-build 执行,

      即不能在glibc当前目录下运行configure。

2.   加上优化开关,export CFLAGS="-g -O2 -march=i686",否则会出现错误,此处的i686请参照自己的机器(执行# arch

,可参考此文:http://lpy999.blog.163.com/blog/static/117372061201352841747588/)

3.  要将glibc-linuxthreads解压到glibc目录下。

     下载glibc-linuxthreads:

      wget  http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.2.tar.gz

4.    当有如下错误时:

 /home/qt/glibc_build/libc_pic.os: In function `fallocate':

/home/qt/glibc-2.11/io/../sysdeps/unix/sysv/linux/i386/fallocate.c:31: undefined reference to `__call_fallocate'

/home/qt/glibc_build/libc_pic.os: In function `fallocate64':

/home/qt/glibc-2.11/io/../sysdeps/unix/sysv/linux/i386/fallocate64.c:31: undefined reference to `__call_fallocate'

/usr/bin/ld: /home/qt/glibc_build/libc.so: hidden symbol `__call_fallocate' isn't defined

/usr/bin/ld: final link failed: Nonrepresentable section on output

collect2: ld 返回 1

make[1]: *** [/home/qt/glibc_build/libc.so] 错误 1

make[1]: Leaving directory `/home/qt/glibc-2.11'

make: *** [all] 错误 2


解决办法:

      在/home/qt/glibc-2.11/sysdeps/unix/sysv/linux/i386/fallocate.c中,

 
 

extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) attribute_hidden;

将上述代码修改为(或注释),

 
 

int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) { return 0; }

说明:外部函数__call_fallocate没有定义,这里定义为一个本地空函数。