libc.so.6: cannot open shared object file报错处理
来源:互联网 发布:淘宝网iphone 7手机膜 编辑:程序博客网 时间:2024/06/16 06:20
一、故障现象
现网一台redhat6主机自从被业务人员升级编译过某软件包以后,ssh无法正常登陆,登陆报错为libc.so.6: cannot open shared object file ,ldd 查看确认,使用的libc.so.6文件位于/lib64目录下。
- [root@361way ~]# ldd /usr/sbin/sshd |grep libc.so
- libc.so.6 => /lib64/libc.so.6 (0x00007fa2017ed000)
通过查看该文件发现是一个软链接文件:
- [root@361way ~]# ll /lib64/libc.so.6
- lrwxrwxrwx 1 root root 12 Jul 15 21:50 /lib64/libc.so.6 -> libc-2.14.so
二、故障解决
通过对比同版本正常主机另一台redhat6主机,发现使用的libc.s0.6软链接的是libc-2.12.so 文件 ,所以可以确认该包被业务人员源码编译的时候升级了。按照之前的经验,将当前的软链先备份后再删除,然后重新链接 libc-2.12.so 文件即可解决问题。不过在执行rm -rf /lib64/libc.so.6后,再执行ls、mv、ln、cp等任一命令时都会出现类型如下的报错:
- /bin/ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
网上查找该报错后,发现可以通过使用LD_PRELOAD解决,方法如下:
- 先删除连接 :
- # cd /lib64
- # LD_PRELOAD=/lib64/libc-2.3.6.so.bak rm libc.so.6 -->我可以正常删除,这一步省略,不能正常删除的,先执行该步
- 建立新连接 :
- # LD_PRELOAD=/lib64/libc-2.3.6.so.bak ln -s /lib64/libc-2.3.6.so.bak libc.so.6
注:从redhat7以后已经没有x86位系统,老的x86位系统lib文件位于/lib目录。另外需要注意的是LD_PRELOAD与后面跟的命令rm 、ln等必须在同一行,不可以先执行LD_PRELOAD后再执行ln -s ,这样还是会报错。
三、原理分析
LD_PRELOAD解决的原理是:linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。但是提供了一个LD_PRELOAD系统变量来改变这个顺序。设置LD_PRELOAD了后,库加载的顺序就改为:
- 搜素路径为: LD_PRELOAD ,当前路径,再是系统lib目录
当然,解决方法并非这一种,还可以使用网上推荐的另外一种方法busybox法,在redhat6版本上的busybox不依赖任何lib库文件的,如下:
- [root@361way ~]# whereis busybox
- busybox: /sbin/busybox /usr/share/man/man1/busybox.1.gz
- [root@361way ~]# ldd /sbin/busybox
- not a dynamic executable
注意,这里并非绝对,一些发行版本上busybox是会依赖如libc.so.6库文件的。
通过busybox ln 或busybox rm 等执行想要的操作。
总结:这里的出错只能算是一个小问题,如果出现shell 都无法执行时,就需要修复模式或光盘引导进行解决了,如果缺了相应的包文件,还在在修复查模式下,安装相应的软件包 --- 具体可以参看之前的博文redhat修复模式安装丢失的包及grub引导修复 。
- libc.so.6: cannot open shared object file报错处理
- libc.so.6: cannot open shared object file: No such file or diretory 问题解决
- ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or
- aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file
- ORACLE10g安装报i386/libawt.so: libXp.so.6: cannot open shared object file.....
- oracle安装报错 /lib/i386/libawt.so:libXt.so.6:cannot open shared object file
- 【报错】ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory
- libESR_Shared.so: cannot open shared object file
- debian系统项目移植报:libstdc++.so.6: cannot open shared object file
- libstdc++.so.6: cannot open shared object file
- libreadline.so.6: cannot open shared object file 问题解决办法
- red hat安装oracle报错 libawt.so: libXp.so.6: cannot open shared object file: No such file
- postgresql报错Error while loading shared libraries: libpq.so.5: cannot open shared object file
- oracle安装报错:libXp.so.6: cannot open shared object file: No such file or directory
- tensorflow 报错 libcusolver.so.8.0: cannot open shared object file: No such file or directory
- error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file
- error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file
- <Troubleshooting> libmawt.so: libXext.so.6: cannot open shared object file: No such file or director
- python读写配置文件
- C语言基础练习4
- 并发编程(二)-访问共享资源
- 运维常用网址大全
- Intellij IDEA database配置 [全局配置][mysql]
- libc.so.6: cannot open shared object file报错处理
- 内存篇之指向栈的指针
- 单用户模式+救援模式找回root密码
- 海云安带你解读移动金融APP安全报告
- spring MVC + Mybatis 框架搭建
- python学习笔记-基础篇-day03 python历史、32bit和64bit系统的区别,系统运行机制浅析
- Android 点滴——px、dp、dip、sp详解
- ORA-39700: database must be opened with UPGRADE option
- centos7安装完成后配置LNMP环境