线上一台服务器在执行 leveldb 程序的时候, 报错:"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 这个版本, 解压到 / 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]# mkidr -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/
- [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=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
- [root@uatblockchain01 build]# echo $LD_LIBRARY_PATH
- /opt/glibc-2.14/lib:
如果是在普通用户下, 就修改普通用户下的环境变量. 比如这里我是在 app 账号下启动的 leveldb 程序, 那么:
- [app@uatblockchain01 ~]$ export LD_LIBRARY_PATH=/opt/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
- ==============================================================================================
然后做 / 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 程序, 就会发现不会有那个报错了! 问题得到解决!
来源: http://www.bubuko.com/infodetail-2554356.html