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 ...
随机推荐
- stand up meeting 12/4/2015 -12/6/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 ------ --- 数据库 朱玉影 等待张葳出关 0 foxit reader 6 ...
- Hash记录字符串
Hash记录字符串模板: mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来 ...
- 二分例题 51nod
例题1 1010 只包含因子2 3 5的数 http://www.51nod.com/Challenge/Problem.html#problemId=1010 K的因子中只包含2 3 5.满足条件的 ...
- skynet启动流程及调用服务
3.基本原理 3.1启动流程 1.skynet-src/skynet_main.c 这个是main()函数所在,主要就是设置一下lua的环境.默认的配置.打开config配置文件,并修改默认配置. ...
- PHP函数:json_last_error
json_last_error() - 返回 JSON 编码解码时最后发生的错误.. 说明: json_last_error ( void ) : int 参数: 无 返回值: 返回一个整型(int ...
- GC日志分析详解
点击返回上层目录 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 GC日志分析详解 以ParallelGC为例,YoungGC日志解释如下 ...
- 测试Thread中的常用方法
package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...
- Dockerfle创建镜像
简介 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行. 一般的,Dockerfile 分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令. # This ...
- NC使用练习之通达OA-2017版本漏洞复现后续
利用上一篇通达OA的漏洞环境,练习NC工具的使用. 步骤: 1.本机启动nc.exe监听端口: 确认端口是否成功监听成功: 2.用冰蝎将nc.exe上传至目标机: 3.用命令行在目标机启动nc.exe ...
- java中Locks的使用
文章目录 Lock和Synchronized Block的区别 Lock interface ReentrantLock ReentrantReadWriteLock StampedLock Cond ...