注意:Centos 为了稳定使用的glibc版本通常比较低。而安装有些程序需要依赖新版本。升级glibc需要慎重,因很多人升级失败后导致系统不能用了。
本人亲测,升级了多台机器,全部升级成功。
glibc简介
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
查看系统glibc库版本可使用如下命令:
$ strings /lib64/libc.so.6 |grep GLIBC_
大家在遇到glibc库问题时候,可以先考虑下为什么要升级GLIBC库,能够通过其他影响性相对小的方式:
- 在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性
- 用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内
- 利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。
确认无法解决,再考虑升级GLIBC库,我升级该库是由于在tensorflow1.13.1版本运行报错:
ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found
升级步骤
1、 首先下载对应版本的安装包
# wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz
2、解压、新建编译目录目录
# tar xf glibc-2.23.tar.gz
# cd glibc-2.23/
# mkdir glibc-build
# cd glibc-build (一定要在新建的目录中操作)
3、安装
# ../configure --prefix=/usr
# make
# make install
在make install 时可能会跳出错误(类似的应该是因为软链接的版本不对造成的)
gawk '/\.gnu\.glibc-stub\./ { \
sub(/\.gnu\.glibc-stub\./, "", $2); \
stubs[$2] = 1; } \
END { for (s in stubs) print "#define __stub_" s }' > /root/glibc-2.23/glibc-build/math/stubsT
gawk: error while loading shared libraries: /lib64/libm.so.6: invalid ELF header
make[2]: *** [/root/glibc-2.23/glibc-build/math/stubs] Error 127
make[2]: Leaving directory `/root/glibc-2.23/math'
make[1]: *** [math/subdir_install] Error 2
make[1]: Leaving directory `/root/glibc-2.23'
make: *** [install] Error 2
解决办法(在另外的窗口执行):
# cd /lib64
# unlink libm.so.6
# ln -s libm-2.23.so libm.so.6
然后再次执行make install
看到如下信息就是安装成功了
LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/glibc-build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'
4、验证
# ldd --version
ldd (GNU libc) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
升级成功!