libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案

线上一台服务器执行teradata数据的Dsql的程序时报错:“libc.so.6: version `GLIBC_2.14’ not found”,排查原因及解决方案如下:

1)产生原因:是由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的!

查看系统glibc支持的版本

[root@localhost ~]# 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
[root@localhost ~]# rpm -qa |grep glibc
glibc-common-2.12-1.209.el6_9.2.x86_64
glibc-2.12-1.209.el6_9.2.x86_64
glibc-headers-2.12-1.209.el6_9.2.x86_64
glibc-devel-2.12-1.209.el6_9.2.x86_64

可以看到最高只支持2.12版本。现在需要将glibc支持的版本升级到GLIBC_2.14

2)升级glibc支持的版本到GLIBC_2.14
到http://www.gnu.org/software/libc/下载最新版本,这里下载了glibc-2.14.tar.xz 这个版本

3)升级步骤:

#将包拷贝到src目录下
[root@localhost ~]# cd /usr/local/src/

#解压
[root@localhost src]# tar -vxf glibc-2.14.tar.xz

#创建/var/VMdisks,将解压后的glibc-2.14移到/var/VMdisks目录下
[root@localhost src]# mkdir -p /var/VMdisks
[root@localhost src]# mv glibc-2.14 /var/VMdisks/
    
#在glibc源码目录建立构建目录,并cd进入构建目录
[root@localhost src]# cd /var/VMdisks/glibc-2.14/
[root@localhost glibc-2.14]# mkdir build && cd build/
[root@localhost build]# ../configure --prefix=/usr/local/glibc-2.14
[root@localhost build]# make -j4
[root@localhost build]# make install && make localedata/install-locales

备注:编译的时候得加上make localedata/install-locales
否则会出现
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

#临时修改环境变量
[root@localhost build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
[root@localhost build]# echo $LD_LIBRARY_PATH
/opt/glibc-2.14/lib:
**#注意:**
这里环境变量要如上一样临时修改,决不能写在/etc/profile文件里,并source使之生效!否则会导致某些shell命令执行不了。

解决办法:
将上面那条配置从/etc/profile文件里删除,然后source使之生效!
重新登录机器即可解决!

4)修改/lib64/libc.so.6的软链接来源,由之前的libc-2.12.so修改为libc-2.14.so

[root@localhost ~]# cd /lib64
[root@localhost ~]# ll libc.so.6
lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.12.so

[root@localhost ~]# ll /usr/local/glibc-2.14/lib/libc-2.14.so
-rwxr-xr-x 1 root root 9645192 Apr  8 03:28 /usr/local/glibc-2.14/lib/libc-2.14.so
[root@localhost ~]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/
    
#删除libc-2.12.so之前的软链接
[root@localhost ~]# unlink /lib64/libc.so.6
#或者直接执行
[root@localhost ~]# rm -f /lib64/libc.so.6
==============================================================================================
#如果上面删除命令执行后,导致该机器的很多shell命令无法执行!甚至于机器无法登陆!报错如下:
error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
    
#注意:千万不要关闭当前的终端窗口,因为此时机器可能无法登陆了。只能在当前终端窗口下进行紧急修复:
[root@localhost ~]# ldconfig
#然后做/lib64/libc.so.6新的软链接,软链接到libc-2.14.so
[root@localhost lib64]# ln -s libc-2.14.so /lib64/libc.so.6
[root@localhost lib64]# ll libc.so.6
lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.14.so
#最后再查看系统glibc支持的版本:
[root@localhost lib64]# 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
发现glibc最高可以支持到2.14版本了。

你可能感兴趣的:(Linux)