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

 

线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14' not found"。 排查缘由及解决方法以下:java

1)产生缘由
是因为Linux系统的glibc版本过低,而软件编译时使用了较高版本的glibc引发的!linux

查看系统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.14shell

到http://www.gnu.org/software/libc/下载最新版本,这里下载了glibc-2.14.tar.xz 这个版本,解压到/usr/local/src目录下
百度云盘下载地址:https://pan.baidu.com/s/1YGia4YD45s42xMq9VapJow
提取密码:nejp
   
[root@uatblockchain01 ~]# cd /usr/local/src/
[root@uatblockchain01 src]# ll
total 9888
-rw-r--r-- 1 root root 10122492 Apr  8 03:21 glibc-2.14.tar.xz
[root@uatblockchain01 src]# tar -vxf glibc-2.14.tar.xz
   
建立/var/VMdisks,将解压后的glibc-2.14移到/var/VMdisks目录下
[root@uatblockchain01 src]# mkdir -p /var/VMdisks
[root@uatblockchain01 src]# mv glibc-2.14 /var/VMdisks/
   
在glibc源码目录创建构建目录,并cd进入构建目录
[root@uatblockchain01 src]# cd /var/VMdisks/glibc-2.14/
[root@uatblockchain01 glibc-2.14]# mkdir build && cd build/
[root@uatblockchain01 build]# ../configure --prefix=/usr/local/glibc-2.14
[root@uatblockchain01 build]# make -j4
[root@uatblockchain01 build]# make install
   
临时修改环境变量
[root@uatblockchain01 build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
[root@uatblockchain01 build]# echo $LD_LIBRARY_PATH
/opt/glibc-2.14/lib:
================================================================================================
注意:
这里环境变量要如上同样临时修改,决不能写在/etc/profile文件里,并source使之生效!不然会致使某些shell命令执行不了。
好比:
[root@uatblockchain01 build]# vim /etc/profile
.......
export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
[root@uatblockchain01 build]# source /etc/profile

这样,将会出现一些命令卡住的现象。
[root@uatblockchain03 ~]# java -version      //一直卡着不动

[root@uatblockchain03 ~]# su - app           //一直卡着不动

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

若是是在普通用户下,就修改普通用户下的环境变量。好比这里我是在app帐号下启动的leveldb程序,那么:
[app@uatblockchain01 ~]$ export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
[app@uatblockchain01 ~]$ echo $LD_LIBRARY_PATH
/opt/glibc-2.14/lib:
   
修改/lib64/libc.so.6的软连接来源,由以前的libc-2.12.so修改成libc-2.14.so
[root@uatblockchain01 ~]# cd /lib64
[root@uatblockchain01 ~]# ll libc.so.6
lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.12.so
   
[root@uatblockchain01 ~]# 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@uatblockchain01 ~]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/
   
删除libc-2.12.so以前的软连接
[root@uatblockchain01 ~]# unlink /lib64/libc.so.6
或者直接执行
[root@uatblockchain01 ~]# 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@uatblockchain01 ~]# ldconfig
 
缘由多是:前面设置"export LD_LIBRARY_PATH= "有误致使的。
linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。
多是因为前面提供了一个LD_PRELOAD系统变量来改变这个顺序。
设置LD_PRELOAD了后,库加载的顺序就改变了。
搜素路径为:LD_PRELOAD ,当前路径,再是系统lib目录。
==============================================================================================
   
而后作/lib64/libc.so.6新的软连接,软连接到libc-2.14.so
[root@uatblockchain01 lib64]# ln -s libc-2.14.so /lib64/libc.so.6
[root@uatblockchain01 lib64]# ll libc.so.6
lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.14.so
   
最后再查看系统glibc支持的版本:
[root@uatblockchain01 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版本了。
   
而后再执行leveldb程序,就会发现不会有那个报错了!问题获得解决!
相关文章
相关标签/搜索