线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14‘ not found"。 排查原因及解决方法如下:
1)产生原因
是由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的!
查看系统glibc支持的版本 [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# cd /usr/local/src/ [[email protected] src]# ll total 9888 -rw-r--r-- 1 root root 10122492 Apr 8 03:21 glibc-2.14.tar.xz [[email protected] src]# tar -vxf glibc-2.14.tar.xz 创建/var/VMdisks,将解压后的glibc-2.14移到/var/VMdisks目录下 [[email protected] src]# mkidr -p /var/VMdisks [[email protected] src]# mv glibc-2.14 /var/VMdisks/ 在glibc源码目录建立构建目录,并cd进入构建目录 [[email protected] src]# cd /var/VMdisks/glibc-2.14/ [[email protected] glibc-2.14]# mkdir build/ [[email protected] build]# ../configure --prefix=/usr/local/glibc-2.14 [[email protected]tblockchain01 build]# make -j4 [[email protected] build]# make install 临时修改环境变量 [[email protected] build]# export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH [[email protected] build]# echo $LD_LIBRARY_PATH /opt/glibc-2.14/lib: 如果是在普通用户下,就修改普通用户下的环境变量。比如这里我是在app账号下启动的leveldb程序,那么: [[email protected] ~]$ export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH [[email protected] ~]$ echo $LD_LIBRARY_PATH /opt/glibc-2.14/lib: 修改/lib64/libc.so.6的软链接来源,由之前的libc-2.12.so修改为libc-2.14.so [[email protected] ~]# cd /lib64 [[email protected] ~]# ll libc.so.6 lrwxrwxrwx 1 root root 12 Apr 8 03:50 libc.so.6 -> libc-2.12.so [[email protected] ~]# 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 [[email protected] ~]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/ 删除libc-2.12.so之前的软链接 [[email protected] ~]# unlink /lib64/libc.so.6 或者直接指向命令: [[email protected] ~]# 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 注意:千万不要关闭当前的终端窗口,因为此时机器可能无法登陆了。只能在当前终端窗口下进行紧急修复: [[email protected] ~]# ldconfig ============================================================================================== 然后做/lib64/libc.so.6新的软链接,软链接到libc-2.14.so [[email protected] lib64]# ln -s libc-2.14.so /lib64/libc.so.6 [[email protected] lib64]# ll libc.so.6 lrwxrwxrwx 1 root root 12 Apr 8 03:50 libc.so.6 -> libc-2.14.so 最后再查看系统glibc支持的版本: [[email protected] 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程序,就会发现不会有那个报错了!问题得到解决!