libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案
线上一台服务器在执行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]# 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环境变量之后,查看$LD_LIBRARY_PATH的值后面有个冒号":"!
这是因为在设置export LD_LIBRARY_PATH之前,$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 需要注意:
1. libc库必须是原来使用的而不是你更新过的lib库!
2. LD_PRELOAD允许你定义在程序运行前优先加载的动态链接库,因此在使用ln前就加载了lib库,而不是等到使用ln时加载,这样就能临时使用命令了。
3. 不仅仅是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下面
如下升级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
libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案的更多相关文章
- /lib64/libc.so.6: version `GLIBC_2.18' not found报错解决
今日安装一区块链服务时报错:/lib64/libc.so.6: version `GLIBC_2.18' not found,检查后现有的glibc版本是2.17,然后参考https://www.ji ...
- CentOS 安装redis2.8.13 提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低
以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的gli ...
- 解决libc.so.6: version `GLIBC_2.14' not found问题, 升级glibc,glibc-2.15
0.以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的g ...
- 执行SDK的aapt报错./aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./aapt)
问题| 执行SDK下的aapt报错./aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./aapt) ../ ...
- 【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低
原文链接:http://www.myexception.cn/linux-unix/1622052.html [linux]提示"libc.so.6: version `GLIBC_2.14 ...
- CentOS “/lib64/libc.so.6: version `GLIBC_2.14′ not found”系统glibc版本太低
1.试图运行程序提示”libc.so.6: version `GLIBC_2.14′ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的.2.查看系统gl ...
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...
- 提示"libc.so.6: version `GLIBC_2.14' not found"
启动php 提示"libc.so.6: version `GLIBC_2.14' not found",原因可能是glibc版本太低,php使用了较高的glibc版本引起的 1,首 ...
- centos6的kibana7.1无法启动报错 FATAL Error: /lib64/libc.so.6: version `GLIBC_2.14' not found 升级glibc的问题处理
centos6的kibana7.1无法启动报错 FATAL Error: /lib64/libc.so.6: version `GLIBC_2.14' not found 升级glibc的问题处理 ...
随机推荐
- forfiles命令详解
目录复制命令: xcopy //server/bak/*.* d:/serverbak /s /e /v /c / d /y /h at 05:30 shutdown ...
- FastReport脚本把数据绑定到文本控件上
public class ReportScript { private void Data25_BeforePrint(object sender, EventArgs e)//Data25是指需要绑 ...
- 给电脑插上无线网卡,变成路由器----Windows系统承载网络的使用
1. 以管理员身份运行命令提示符(PowerShell) 2. 启用并设定虚拟wifi网卡 netsh wlan set hostednetwork mode=allow ssid=wifi名称 ke ...
- xshell 5连接NAT模式的虚拟机
这里简称真实的外部电脑为主机.当虚拟机NAT模式上网时(区别于桥接上网,桥接上网的话,主机和虚拟机可以互访),虚拟机是可以访问主机的,但是由于NAT机制,导致主机不能访问虚拟机,那么如何让主机上的xs ...
- 第七章 鼠标(CHECKER1)
CHECKER1程序将客户区划分成25个矩形,构成一个5*5的数组.如果在其中一个矩形内单击鼠标,就用X形填充该矩形.再次单击,则X形消失. /*--------------------------- ...
- Django框架的使用教程--路由-请求-响应[四]
路由 路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件urls中使用include()包含各个应用的子路由的数据 路由的解析顺序 Django接收到请求后, ...
- redis慢查询日志的配置和查看
Redis是单线程运行的,一个慢执行,会让后续的大量执行延时,吞吐量也会极大的降低.记录.查询.监控Redis慢执行意义重大.Redis的slowlog只记录在内存中,效率很高,不用过于担心影响性能. ...
- PHP LAMP环境搭建及网站配置流程(完整版)
心血来潮想做一个自己的博客网站,写一些文章做技术分享,平时遇到的一些问题的解决办法都记录下来,网站搭建成功,那么第一篇博客自然就是整个网站的搭建以及域名的注册.备案.解析流程,总共分为以下几步: 1. ...
- C# 接受MQTT服务器推送的消息
前言: MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制. 大家可以直接上GitHub下载MQQT服务的源码,源码地址:https:// ...
- mysql删除数据左右空格
select trim(字段) from 表 删除左右空格 select ltrim(字段) from 表 删除左空格 select rtrim(字段) from 表 删除右空格