出现这类错误的原因通常是动态库无法被加载,本文介绍了常规的解决方案,适用多种情况;
创作不易,如果本文帮到了您;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;
如果本文帮到了您,请帮忙点个赞 ;

1 前言

ubuntu 系统下安装了程序,但是运行的时候出现 error while loading shared libraries: libGL.so.1 的错误,基本上可以知道是GL动态库没有被正确加载,基本上这种问题的解决思路如下;

  • 寻找本地是否已经存在错误提示中的动态库;若没有找到,则需要自行安装相应版本的动态库;
  • 配置ldconfig即可,这里涉及到linux下程序是如何寻找动态库;

注意
注意
注意

注意:寻找解决方案可以直接查看第三节,亲测有效;第二节比比赖赖,但是对其中的原理进行了剖析,感兴趣的也可以看一下。

2 程序是如何搜索到动态库的?

这里我们有必要了解一下一个程序的运行是如何搜索到所需要的动态库,以便于理解后面具体的解决方案,但是由于篇幅较短,这里点到即止,只给出关键部分。
首先一个程序运行的整体过程如下;

  • 0 程序运行–>
  • 1 加载ld-linux.so.2–>
  • 2 搜索动态库路径–>
  • 3 在相应路径下根据动态链接表搜索动态库 –>
  • 4 搜索相应符号链接加载至内存执行->
  • 运行成功

整理成流程图如下图所示;

Created with Raphaël 2.2.0打开程序1 加载 ld-linux.so.22 搜索动态库路径3 在相应路径下根据动态链接表搜索动态库缺少相应库?提示错误4 搜索相应符号链接加载至内存执行加载成功?开始运行yesnoyesno

以此我们大概可以分析出,一般无法找到动态库的原因基本有两点:

  • 本地缺少相应动态库;
  • 动态库真实路径不存在路径搜索表中;

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 错误的常规解决思路看程序与动态库的关系的更多相关文章

  1. Linux中error while loading shared libraries错误解决办法

    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库 ...

  2. [转]"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

    [转]"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法 http://blog.csdn.net/sahuso ...

  3. 订阅 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 端口 ...

  4. (转)error while loading shared libraries:libmysqlclient.so.18 错误

    error while loading shared libraries:libmysqlclient.so.18错误 新手安装php的时候如果出现这种问题,解决办法很简单,就是查看你的mysql安装 ...

  5. error while loading shared libraries:libmysqlclient.so.18 错误

    error while loading shared libraries:libmysqlclient.so.18错误 新手安装php的时候如果出现这种问题,解决办法很简单,就是查看你的mysql安装 ...

  6. 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 一下,查看系统里是否有该 ...

  7. 解决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 ...

  8. 【linux排错】"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: lcw: error : cannot open shared object file: No such file ...

  9. Linux上error while loading shared libraries问题解决方法

    在Linux环境执行程序时经常会遇到提示程序依赖动态库.so文件不存在的情况,出现报错"error while loading shared libraries: XXXX.so.XX: c ...

随机推荐

  1. win7下delphi中的help文档问题

    一,要安装WinHlp32.exe 文件 二, 三,在安装目录下:

  2. 掉了10根头发都无法解决的数学题,python帮你完美解答

    本来这个周末过得开开心心,结果为了解一道数学题薅掉了一把头发...整整10根! 而且还是一道小学数学题!!! 到底是什么题呢?大家看看吧 这不就是一道逻辑题嘛! 先假如丁错,则甲乙丙对,此时最小的ab ...

  3. 【原创干货】大数据Hadoop/Spark开发环境搭建

    已经自学了好几个月的大数据了,第一个月里自己通过看书.看视频.网上查资料也把hadoop(1.x.2.x).spark单机.伪分布式.集群都部署了一遍,但经历短暂的兴奋后,还是觉得不得门而入. 只有深 ...

  4. Laravel - 上手实现 - 文件上传、保存到 public 目录下

    1.为了访问方便,将上传的文件保存在 public 目录下,需要进行修改配置. 找到 config/filesystems.php 文件然后修改 root.具体如下: 'local' => [ ...

  5. MySQL学习之正则表达式篇

    正则表达式(REGEXP) 1.简介 正则表达式是用来匹配列值的特殊字符集合,许多领域都有涉及, MySQL使用的正则表达式仅为其一个小小的子集. 2.基本字符匹配 2.1筛选包含特定字符串的信息 / ...

  6. PHP文件包含漏洞(利用phpinfo)复现

    0x01 简介 PHP文件包含漏洞中,如果找不到可以包含的文件,我们可以通过包含临时文件的方法来getshell.因为临时文件名是随机的,如果目标网站上存在phpinfo,则可以通过phpinfo来获 ...

  7. 云开发网站托管悄悄上线了 Next.js 的支持

    我们知道部署web应用程序的最佳方式是作为静态HTML应用程序,因为他对搜索引擎很友好,速度快等等,这对我们写个人博客这样的小型网站无异于非常nice.如果你的应用可以作为静态HTML,那么可以试试N ...

  8. python学习笔记(一)---字符串与列表

    字符串的一些处理 字符串的大小写 name="lonmar hb" print(name.upper())#全大写 print(name.lower())#全小写 print(na ...

  9. swoole学习--登录模块

    使用swoole+thinkphp6.0+redis 结合开发的登录模块,做完之后有几点感悟: 1.不要相信任务数据,包括请求的外部接口,特别是超时者部分,尽可能的交给task完成. 2.原来可以在入 ...

  10. 对 ThreadLocal 的了解(一)

    Threadlocal ThreadLocal 在我个人理解范围内,主要作用是在同一个线程里面,去共享某个数据给这个线程在不同的阶段去使用. 本次使用范围 在集成 pageOffice 在线 word ...