centos libc.6.so 链接出错
来源:互联网 发布:java中文api下载 编辑:程序博客网 时间:2024/06/16 21:07
学技术怎么能不会用服务器,阿里云服务器现8折优惠,还有更多优惠券限量发放
https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=7czske1k&utm_source=7czske1k
问题
服务器用的是centos 5.8,出现过几次libc.6.so的基础库在用yum安装软件时候链接被替换了,然后所有系统命令都不能使用了。提示如下图:
Linux许多命令都是依赖这个C语言的动态链接库,在centos里,这是一个软链,被替换后,被替换到新版本的动态库时,会出现这个问题。我这里是从版本2.5被换成了2.12(截图时已修复)。
原因
从google搜索到这样的答案:
The loader on your system does not support the new Linux ABI. Until relatively recently, Linux ELF binaries used the System V ABI. Recently, in support of STT_GNU_IFUNC, the Linux ABI was added. You would have to update your system C library to have a loader that support STT_GNU_IFUNC, and then it will also recognize ELF objects with the Linux ABI type.
也就是说系统版本的动态库加载器太旧了,不支持新版本的动态库,要嘛升级系统的加载器,要嘛恢复到旧的库。
用LD_PRELOAD修复
出现问题后所有几乎所有命令都不能使用,原因就是没办法加载那个新版本的动态库,而LD_PRELOAD
环境变量则可以在运行命令前指定加载的动态库。
LD_PRELOAD 是这样的一个环境变量:它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。该功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们 可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。
执行如下命令,直接就可以恢复了。不过执行命令的必需是有root权限的用,sudo命令还是用不了的(可能还要加载其他动态库)。
root# LD_PRELOAD=/lib64/libc-2.5.so ln -sf /lib64/libc-2.5.so /lib64/libc.6.so
用sln命令修复
应该很多人都不知道这个命令,这个命令在/sbin/目录下,man的描述是这样的。
sln symbolically links
dest
tosource
. It is statically linked, needing no
dynamic linking at all. Thus sln is useful to make symbolic links to dynamic
libraries if the dynamic linking system for some reason is nonfunctional.
看起来就是为了修复动态库的问题而做的,它是一个静态链接生成的命令,不依赖任何的动态库,使用用方法跟ln是一样的。
root# /sbin/sln -sf /lib64/libc-2.5.so /lib64/libc.6.so
关于loader
老外对这个问题的回答有一句是这样的:
Ah, I didn’t realize you had replaced the system C library without also replacing the loader, or I would have been more specific in my advice.
也就是,要升级libc.6.so要同时升级动态库的loader。看了一下我系统上的ld动态库版本也是2.5,可能要升级libc.6.so就要将ld升级到同样的版本。这边系统恢复了,不敢再去动,没有再做尝试,以后遇到再补充。
- centos libc.6.so 链接出错
- 链接libc.so导致crash
- libc.so
- 解决Centos下libc.so.6被破坏问题
- 误删libc.so.6
- 误删 libc.so.6
- libc.so.6
- libc.so.6
- 误删libc.so.6
- CentOS中设置.so链接文件路径
- centos学习:动态链接库 .so "dll"?
- CentOS “/lib64/libc.so.6: version `GLIBC_2.14′ not found”系统glibc版本太低
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
- centos下出现/lib64/libc.so.6: version `GLIBC_2.17' not found问题解决方案
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题(升级glibc2.20)
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
- 替换本地libc.so为指定libc.so
- libc.so.6 缺失问题
- SQL优化
- SpringBoot应用与原理之开发环境搭建
- EL表达式和JSTL常用学习
- 深度学习caffe平台-----裁剪层(Crop Layer)参数及参数详解
- 浏览器打开含有applet标签网页报ClassNotFoundException错误的解决办法
- centos libc.6.so 链接出错
- C++ 学习笔记
- Nginx出现could not open error log file (permission denied)报错
- C#中怎样实现序列化和反序列化
- 大型网站架构之分布式消息队列
- numpy 数组和矩阵的乘法的理解
- SYN攻击(DDOS攻击的一种)
- 8月份遇到web项目问题总结
- 小程序 学习。。。[个人感觉吧 官方文档写的相当详细了。。]