centos6.9中glibc升级到2.14

用高版本的gcc编译的程序运行在低版本的机器上时候提示”libc.so.6: version ‘GLIBC_2.14’ not found” 这是由于glibc版本太低造成的,忍不住吐槽办公网的很多机器还是centos6.9,经常遇到这个问题得手动安装; 查看系统glibc支持的版本

strings /lib64/libc.so.6 |grep GLIBC_ 
rpm -qa |grep glibc

最高只支持2.12版本。因此需要将glibc支持的版本升级到GLIBC_2.14以上 下载地址:http://ftp.gnu.org/gnu/libc/ (有点慢) 选好版本后wget 对应链接即可

wget http://ftp.gnu.org/gnu/libc/glibc-2.14.1.tar.gz
#下载完成后解压,
tar zxvf  glibc-2.14.1.tar.gz

我就直接在/root/glibc-2.14.1 下进行解压,之后 mkdir build && cd build/ 然后进行安装

../configure --prefix=/usr/local/glibc-2.14.1
make -j4 && make install  

make 过程出现错误:

/usr/bin/install: `include/limits.h' and `/usr/local/glibc-2.14.1/include/limits.h' are the same file

如果直接把编译的目录和安装的目录放一起可能出错,原因就是解压的glic-2.14.tar.gz源码和编译时定义的目录../configure –prefix=/usr/local/glibc-2.14.1放到了一起。 把下载解压的glic-2.14 和prefix后的分开即可;

在make install过程中出现如下错误:

Can't open configuration file /usr/local/glibc-2.14.1/etc/ld.so.conf: No such file or directory

直接查找然后复制到etc目录就能继续执行make下去

find / -name "ld.so.conf"
cp  /etc/ld.so.conf   /usr/local/glibc-2.14.1/etc/

另外就是LD_LIBRARY_PATH路径中如果末尾出现了: 或者中间出现了::都会导致找不到对应的LD_LIBRARY_PATH 出错; 如果出现下面的错误,那么可重新export LD_LIBRARY_PATH=去掉非法字符后的路径

configure: error: 
 *** LD_LIBRARY_PATH shouldn't contain the current directory when
 *** building glibc. Please change the environment variable 
*** and run configure again.

LD_LIBRARY_PATH不能以终结符作为开始和最后一个字符,不能有2个终结符连在一起,所以修改下LD_LIBRARY_PATH即可

然后导入环境变量,程序就能正常启动;

export LD_LIBRARY_PATH=/usr/local/glibc-2.14.1/lib:$LD_LIBRARY_PATH

后续每次不可能都要export,因此要更新系统的 libc.so.6;

rm -rf /lib64/libc.so.6 
ln -s /usr/local/glibc-2.14.1/lib/libc-2.14.1.so   /lib64/libc.so.6
#上述rm执行后可能导致系统命令不可用可在执行时候加入环境变量
LD_PRELOAD=/usr/local/glibc-2.14.1/lib/libc-2.14.1.so  ln -s /usr/local/glibc-2.14.1/lib/libc-2.14.1.so   /lib64/libc.so.6 

在glibc安装后重新查看版本后发现最好已经到了2.14

strings /lib64/libc.so.6 |grep GLIBC_ 
LIBC_2.14

最后的小插曲,程序直接./二进制可以启动,但是supervisor 启动不行,需要重新启动supervisor才行

2021-01-22 17:23:27,303 INFO exited: xxx(exit status 1; not expected) 2021-01-22 17:23:30,307 INFO spawned: ‘xxx’ with pid 13891

参考: Centos6.4升级glibc_2.14 解决’GLIBC_2.14’ not found问题时遇到的坑 编译 glibc-2.14 时出现的一个LD_LIBRARY_PATH不路径bug

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 1228 天前,文中所描述的信息可能已发生改变,请谨慎使用。

Comments