Linux从error while loading shared libraries: libxxx.so.x 错误的常规解决思路看程序与动态库的关系
出现这类错误的原因通常是动态库无法被加载,本文介绍了常规的解决方案,适用多种情况;
创作不易,如果本文帮到了您;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
1 前言
ubuntu 系统下安装了程序,但是运行的时候出现 error while loading shared libraries: libGL.so.1 的错误,基本上可以知道是GL动态库没有被正确加载,基本上这种问题的解决思路如下;
- 寻找本地是否已经存在错误提示中的动态库;若没有找到,则需要自行安装相应版本的动态库;
- 配置
ldconfig即可,这里涉及到linux下程序是如何寻找动态库;
注意
注意
注意
注意:寻找解决方案可以直接查看第三节,亲测有效;第二节比比赖赖,但是对其中的原理进行了剖析,感兴趣的也可以看一下。
2 程序是如何搜索到动态库的?
这里我们有必要了解一下一个程序的运行是如何搜索到所需要的动态库,以便于理解后面具体的解决方案,但是由于篇幅较短,这里点到即止,只给出关键部分。
首先一个程序运行的整体过程如下;
- 0 程序运行–>
- 1 加载ld-linux.so.2–>
- 2 搜索动态库路径–>
- 3 在相应路径下根据动态链接表搜索动态库 –>
- 4 搜索相应符号链接加载至内存执行->
- 运行成功
整理成流程图如下图所示;
以此我们大概可以分析出,一般无法找到动态库的原因基本有两点:
- 本地缺少相应动态库;
- 动态库真实路径不存在路径搜索表中;
2.1 ldd 指令
ldd命令可以打印出当前出现所依赖的动态链接库;
可以通过man ldd了解其如何使用;

本文以wireshark为例进行介绍,先找到wireshark的安装路径以及查看它的动态库依赖表;
Jackma@albaba:find / -name wireshark
/usr/share/doc/wireshark
/usr/share/wireshark
/usr/lib/x86_64-linux-gnu/wireshark
/usr/bin/wireshark
/root/.config/wireshark
/etc/wireshark
Jackma@albaba:ldd /usr/bin/wireshark
具体如下所示;

找一下依赖库里有没有libGL
ldd /usr/bin/wireshark | grep libGL

有所发现,最终程序是要寻找/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1,
ls -l /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
结果如下所示;动态库存在;

2.2 ldconfig
ldconfig的使用直接看man page截图如下所示;

可以看到,ldconfig的作用是在受信任的目录下创建指向的最新共享库的必要链接和缓存;
通常这些路径包括;
/lib,/usr/lib,这些一般是系统默认的链接库;/etc/ld.so.conf,通常动态库搜索路径的文件还会放在/etc/ld.so.conf.d/下;
ls -l /etc/ld.so.conf.d/

因此只要将libGL.so.1所在路径**/usr/lib/x86_64-linux-gnu/mesa/**添加到其中.conf文件中即可,
然后运行ldconfig更新缓存。之后再运行程序,发现就开业正常运行了。
3 解决方案
**现象:**在终端运行程序 如,wireshark;
出现报错:error while loading shared libraries: libGL.so.1;
关键字: libGL.so.1
解决办法:
找到程序wireshark所在路径;
sudo find / -name wireshark
找到库libGL.so.1所在路径;
sudo ldd /usr/bin/wireshark | grep libGL.so.1

添加库路径;
sudo echo /usr/lib/x86_64-linux-gnu/mesa/ > /etc/ld.so.conf.d/mesa.conf
sudo ldconfig
完成以上操作,程序就可以正常运行了。
4 总结
本文简单解决了程序无法链接到动态库的问题,并且介绍了两者之间的紧密联系,笔者能力有限,难免存在错误和纰漏,请大佬不吝赐教。
创作不易,如果本文帮到了您;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
Linux从error while loading shared libraries: libxxx.so.x 错误的常规解决思路看程序与动态库的关系的更多相关文章
- Linux中error while loading shared libraries错误解决办法
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库 ...
- [转]"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
[转]"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法 http://blog.csdn.net/sahuso ...
- 订阅 memcached: error while loading shared libraries: libevent-2.0.so.5: cannot o解决
memcached: error while loading shared libraries: libevent-2.0.so.5: cannot o解决 memcached基本选项 -p 端口 ...
- (转)error while loading shared libraries:libmysqlclient.so.18 错误
error while loading shared libraries:libmysqlclient.so.18错误 新手安装php的时候如果出现这种问题,解决办法很简单,就是查看你的mysql安装 ...
- error while loading shared libraries:libmysqlclient.so.18 错误
error while loading shared libraries:libmysqlclient.so.18错误 新手安装php的时候如果出现这种问题,解决办法很简单,就是查看你的mysql安装 ...
- error while loading shared libraries: libXXX.so.x: cannot open shared object file: No such file or directory .
转载:http://www.eefocus.com/pengwr/blog/2012-02/235057_baf52.html 此时你可以locate libXXX.so.x 一下,查看系统里是否有该 ...
- 解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
原文地址:http://blog.csdn.net/yjk13703623757/article/details/53217377 一.问题 运行hydra时,提示错误: hydra : error ...
- 【linux排错】"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: lcw: error : cannot open shared object file: No such file ...
- Linux上error while loading shared libraries问题解决方法
在Linux环境执行程序时经常会遇到提示程序依赖动态库.so文件不存在的情况,出现报错"error while loading shared libraries: XXXX.so.XX: c ...
随机推荐
- 绝地求生模拟登陆!高难度JS解密教程,Python高级爬虫开发,
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- NGINX 类漏洞 整理记录
简单介绍NGINX: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行. 其特点是占有内存少,并发能力强,nginx的并 ...
- Vue【你知道吗?】
前言 Vue的由来 Vue最早发布于2014年左右,作者是美中国学生尤雨溪.Vue 的定位就是为前端开发提供一个低门槛,高效率,但同时又能够伴随用户成长的框架 尤雨溪谈Vue.js :缔造自由与真我 ...
- JasperReports入门教程(一):快速入门
JasperReports入门教程(一):快速入门 背景 现在公司的项目需要实现一个可以配置的报表,以便快速的适应客户的需求变化.后来在网上查资料发现可以使用JasperReports + Jaspe ...
- amba H2平台用PWM控制LCD背光
ambarella H2系列Soc的GPIO口能作PWM使用的个数有限(GPIO0-GPIO3),从PRM里GPIO: Function Selection章节可以得到如何配置GPIO为PWM功能. ...
- python 字符与数字如何转换
python中字符与数字相互转换用chr()即可. python中的字符数字之间的转换函数 int(x [,base ]) 将x转换为一个整 ...
- thinkphp 5 一些常见问题
## 请求缓存 request_cache
- 安装 wbemcli
安装环境 建立自己的目录后, wget http://vault.centos.org/6.0/os/x86_64/Packages/sblim-wbemcli- ...
- Net core项目实战篇01---EFCore CodeFirs For Mysql 数据库初始化
从今天开始我们用Net Core进行项目实战,采用微服务构架,因此你会看到我各模块开始都是用的web api.项目中的代码直接可以复制.费话不多说,现在就来跟我一起开始吧! 1.打开VS2017—&g ...
- CCS进阶——div的宽度和高度是由什么决定的?
核心知识 文档流/普通流(Normal Flow) 内联元素的宽高(高度是由行高决定的,宽度=内容+border+marging+padding) 块级元素的宽高(高度是内部文档流元素的高度总和,宽度 ...