irpas技术客

安装mongodb.缺少依赖包_hlhy0906_mongodb依赖

irpas 3158

https://·/kevingrace/p/8744417.html

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 查看系统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://·/s/1YGia4YD45s42xMq9VapJow 提取密码:nejp

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 [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]# echo $LD_LIBRARY_PATH

[root@uatblockchain01 build]# [root@uatblockchain01 build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH [root@uatblockchain01 build]# echo $LD_LIBRARY_PATH /usr/local/glibc-2.14/lib:

可以发现,上面设置export LD_LIBRARY_PATH环境变量之后,查看 L D L I B R A R Y P A T H 的 值 后 面 有 个 冒 号 " : " ! 这 是 因 为 在 设 置 e x p o r t L D L I B R A R Y P A T H 之 前 , LD_LIBRARY_PATH的值后面有个冒号":"! 这是因为在设置export LD_LIBRARY_PATH之前, LDL?IBRARYP?ATH的值后面有个冒号":"!这是因为在设置exportLDL?IBRARYP?ATH之前,LD_LIBRARY_PATH默认值就是空的。

最好如下设置 [root@uatblockchain01 build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib [root@uatblockchain01 build]# echo $LD_LIBRARY_PATH /usr/local/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@uatblockchain01 build]# java -version //一直卡着不动

[root@uatblockchain01 build]# su - app //一直卡着不动

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

需要注意: 如果是在普通用户下,就修改普通用户下的环境变量。比如这里我是在app账号下启动的leveldb程序,那么: [app@uatblockchain01 ~]$ echo $LD_LIBRARY_PATH

[app@uatblockchain01 ~]$ [app@uatblockchain01 ~]$ export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib [app@uatblockchain01 ~]$ echo $LD_LIBRARY_PATH /usr/local/glibc-2.14/lib

修改/lib64/libc.so.6的软链接来源,由之前的libc-2.12.so修改为libc-2.14.so [root@uatblockchain01 build]# cd /lib64 [root@uatblockchain01 lib64]# ll libc.so.6 lrwxrwxrwx 1 root root 12 Apr 8 03:50 libc.so.6 -> libc-2.12.so

[root@uatblockchain01 lib64]# 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 lib64]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/

删除libc-2.12.so之前的软链接 [root@uatblockchain01 lib64]# unlink /lib64/libc.so.6 或者直接执行 [root@uatblockchain01 lib64]# rm -f /lib64/libc.so.6

================================================================================================ 需要注意: 如上面操作,在取消之前libc.so.6的软链接或者删除/lib64/libc.so.6之后,可能导致系统的好多命令都无法使用! 这时候要特别注意:千万不要关闭当前的终端窗口!!!因为此时机器可能无法登陆了,只能在当前终端窗口下进行紧急修复:

可能出现下面两个报错! <<< 报错1 >>> error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

解决办法: [root@uatblockchain01 lib64]# ldconfig

原因可能是:前面设置"export LD_LIBRARY_PATH"的环境变量有误导致的。 linux调用so的库文件时,搜素路径为当前路径,接着再是系统lib目录。可能是由于前面提供了一个LD_PRELOAD系统变量来改变这个顺序。 设置LD_PRELOAD了后,库加载的顺序就改变了。搜素路径为:LD_PRELOAD ,当前路径,接着再是系统lib目录。

<<< 报错2 >>> error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

上面报错,既然命令无法寻址到软连接,那么直接命令行给它!即将原来的/lib64/libc.so.6库再软链接连接回去!! 可以采用下面两种挽救方法:

挽救方法1: [root@uatblockchain01 lib64]# unset LD_LIBRARY_PATH [root@uatblockchain01 lib64]# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6 [root@uatblockchain01 lib64]# ldconfig

挽救方法2: [root@uatblockchain01 lib64]# unset LD_LIBRARY_PATH [root@uatblockchain01 lib64]# ldconfig -l -v /lib64/libc-2.12.so [root@uatblockchain01 lib64]# ldconfig

需要注意:

libc库必须是原来使用的而不是你更新过的lib库!LD_PRELOAD允许你定义在程序运行前优先加载的动态链接库,因此在使用ln前就加载了lib库,而不是等到使用ln时加载,这样就能临时使用命令了。不仅仅是ln,只要加了LD_PRELOAD=/lib64/libc-2.12.so,后面可以跟一切"因为libc.so.6软链接被取消或被删除"而不能用的命令。 ================================================================================================

然后做/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程序,就会发现不会有那个报错了!问题得到解决!

另外需要谨记:libc库是很多命令操作得依赖库,libc.so.6至关重要,绝对不能删,不能改名!! 更简单升级方法:不改变环境变量,可以直接将glibc新版本编译安装到系统默认路径/usr下面

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如下升级glibc版本到2.17做法

wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz tar -xvf glibc-2.17.tar.gz cd glibc-2.17 mkdir build; cd build …/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make -j 8 make install

查看版本,发现已升级到2.17版本

ldd --version strings /lib64/libc.so.6 |grep GLIBC_

=============================================================== 如下升级glibc版本到2.18做法

wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar -xvf glibc-2.18.tar.gz cd glibc-2.18 mkdir build && cd build && …/configure --prefix=/usr && make -j4 && make install

*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mongodb依赖 #version #GLIBC_214 #not #found