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 总结
本文简单解决了程序无法链接到动态库的问题,并且介绍了两者之间的紧密联系,笔者能力有限,难免存在错误和纰漏,请大佬不吝赐教。
创作不易,如果本文帮到了您;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
最新文章
- Latex论文写作-Texsdudio 快捷键总结
- 20145330第八周《Java学习笔记》
- SAP BW标准模型简介(BW星形模型 BW Star Schema )
- css的box-sizing:border-box有什么用
- Eclipse下安装/配置Jrebel6.X
- Android Path
- [原]C语言实现的快速排序,采用分治策略,递归实现
- CentOS DNS resolv重启无效的解决方法
- pv ticketlock解决虚拟环境下的spinlock问题
- a='1,2,3,4,5'如何转换为['1','2','3','4','5']
- 第四节,Linux基础命令
- VB6之调整任务栏按钮的位置
- Spring bean中的properties元素内的name 和 ref都代表什么意思啊?
- 品阿里 Java 开发手册有感
- 微信小程序中如何使用WebSocket实现长连接(含完整源码)
- AlexeyAB大神版yolo 待完善
- Java 多线程(六)之Java内存模型
- centos ping www.baidu.com ping: unknown host www.baidu.com
- spring boot读取配置文件
- Flask:abort()函数
热门文章
- Jar包一键重启的Shell脚本及新服务器部署的一些经验
- frp内网穿透学习
- Python 如何移除旧的版本特性,如何迎接新的特性?
- SQLServer系统表使用简介(sysobjects、syscolumns、syscomments等)转载
- 图数据库的内部结构 (NEO4j)
- JavaScript type=";text/template";的用法
- 地点下来框的实现(php)
- php---算法和数据结构
- Cent OS 7 搭建MySQL
- 如何打开 Visual Studio 的 Dump,适用于调试 appcrash,exception