0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何查看linux程序共享库呢?

嵌入式小生 来源:嵌入式小生 2023-08-28 09:11 次阅读

一、开篇

linux系统中,程序通常需要依赖于外部库来正常工作。这些库可以直接编译到程序中,也可以从共享库池中加载。使用共享库有助于减小程序大小,简化开发和打包。在linux中,共享库通常存储在/lib或/usr/lib目录下。

不同的linux发行版甚至同一发行版的版本可能使用不同的库,从而导致一个发行版编译的程序在另一个发行版上运行出现故障。当系统中缺少所需库时,这时可能会遇到错误。在嵌入式linux环境中,库文件更是非常关键,因为嵌入式linux中硬件环境往往具有严苛的限制,太多的库将无法完整放入对应的硬件环境下,所以重新组建linux下的运行库在嵌入式linux设计中是重要的一环操作。

要解决共享库加载的问题,我们可以使用一些工具和命令来确定程序所依赖的共享库,本文将讨论实现这一目标的几种方法。

二、ldd命令

ldd命令用于打印出共享对象的依赖。语法如下:

ldd[选项]文件

可选的参数如下:

--help印出这份说明然后离开
--version印出版本信息然后离开
-d,--data-relocs进程数据重寻址
-r,--function-relocs进程数据和函数重寻址
-u,--unused印出未使用的直接依赖关系
-v,--verbose印出所有信息

例如:

f4d7eef4-4538-11ee-a2ef-92fbcf53809c.png

使用-v可查看更详细的信息:

f50b460a-4538-11ee-a2ef-92fbcf53809c.png

注意,使用ldd命令时可能会导致程序运行,因此不要在不受信任的可执行文件上使用ldd。

三、readelf命令

readelf命令是一个强大的命令,用于显示ELF文件的信息,可使用该命令查看共享库的依赖,方法如下:

readelf--dynamic./app|grepNEEDED

例如下列命令用于查看/usr/bin/dir的依赖库:

f53cbdca-4538-11ee-a2ef-92fbcf53809c.png

四、objdump命令

objdump命令在开发中也是一个较为常用的命令,且功能强大,用于显示对象文件中的信息,可以使用该命令来查看共享库的依赖,方法如下:

objdump-p/path/to/program|grepNEEDED

例如下列命令用于查看/usr/bin/dir的依赖库:

f5561c8e-4538-11ee-a2ef-92fbcf53809c.png

五、pldd命令

f56d723a-4538-11ee-a2ef-92fbcf53809c.png

六、/proc//maps

通过检查/proc//maps来获知运行进程的库需求:

awk'/.so/{print$6}'/proc/$(pgrepbash|head-n1)/maps|sort-u

例如:

f59a249c-4538-11ee-a2ef-92fbcf53809c.png

上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的ID。

七、使用pmap收集程序的共享库需求

pmap$(pgrepXorg|head-n1)|grep.so|awk'{print$4}'|sort-u

上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的ID。

八、使用lsof工具检查正在运行的进程的共享库需求

使用方法:

lsof-p$(pgrepbash|head-n1)|grepmem

上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的ID。

九、总结

在发行版的linux系统中,上述命令几乎都可以使用来查看动态库的依赖关系,在嵌入式linux系统中,可能由于网络环境的限制、运行架构的不同、构建的文件系统中不存在对应的命令程序,从而导致上述一些命令无法运行或者找不到运行的命令,这时候常使用readelf和objdump查看动态库的依赖关系,因为在交叉编译构建工具链中一般会包含readelf和objdump命令的变体。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288459
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26913
  • ELF文件
    +关注

    关注

    0

    文章

    14

    浏览量

    7086
  • Bash
    +关注

    关注

    0

    文章

    57

    浏览量

    10071

原文标题:八种查看linux程序共享库的方法,了解多少?

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux下进程间如何实现共享内存通信

    这次我们来讲一下Linux进程通信中重要的通信方式:共享内存作为Linux软件开发攻城狮,进程间通信是必须熟练掌握的重要技能,而共享内存是在程序
    发表于 04-26 17:14 573次阅读

    linux开发:Linux查看端口占用

    前段时间有学生问到,怎么查看linux系统中已经被占用的端口?下面就统一给大家解释一下。提到端口,那首先来回顾端口定义,为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端口号来区别
    发表于 03-12 14:40

    Linux系统下的链接原理是什么?有哪些应用

    中,成为执行程序的一部分来执行的。动态:是在执行程序启动时加载到执行程序中,可以被多个执行程序共享
    发表于 06-21 17:05

    linux共享下,调用共享库函数时,程序卡死在函数中的pid=fork()这里的原因?

    linux共享下,调用共享库函数时,程序卡死在函数中的pid=fork()这里,来个大佬指导指导原因...
    发表于 06-20 06:55

    Linux系统共享库编程

    一、说明 类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用。Windows中为*.dll,而Linux中为*.so。下面详细介绍如何创建、使用Linux
    发表于 09-13 16:49 24次下载

    Linux下静态库和动态库(共享库)的制作与使用

    Linux下静态库和动态库(共享库)的制作与使用Linux
    发表于 07-09 14:39 1042次阅读

    linux共享程序库剖析

    共享程序库通过版本号来完成对应用程序所使用的程序库的升级,同时保留了对原有应用程序的兼容。本文将讨论此方法的实际内幕,以及在
    发表于 04-02 14:35 205次阅读

    如何查看linux端口

    有时我们需要知道系统中某个端口的占用情况,以便于解除程序对端口的占用,那么怎么查看Linux系统中的端口情况呢?
    发表于 05-17 09:45 1702次阅读

    Linux服务的内容如何查看

     ps是进程查看命令,netstat是端口查看命令,在Linux系统中,服务一定是有进程的,所以使用ps命令可以查看服务运行情况,另外,Linux
    发表于 05-20 09:09 614次阅读
    <b class='flag-5'>Linux</b>服务的内容如何<b class='flag-5'>查看</b>

    linux的主机名如何查看

    linux如何查看主机名?
    发表于 06-15 08:59 4951次阅读
    <b class='flag-5'>linux</b>的主机名如何<b class='flag-5'>查看</b>

    ldd命令:用于打印程序或者共享库文件所依赖的共享库列表

    1.命令简介 ldd 命令用于打印程序或者共享库文件所依赖的共享库列表。注意,ldd 本身不是一个二进制程序,而是一个 Shell 脚本,使用文本编辑器 vim 可以
    的头像 发表于 02-02 11:37 1830次阅读

    Linux系统的共享内存的使用

    但有时候为了让不同进程之间进行通信,需要让不同进程共享相同的物理内存,Linux通过 共享内存 来实现这个功能。下面先来介绍一下Linux系统的共享
    的头像 发表于 11-14 11:55 970次阅读

    Linux程序被Killed,查看原因

    Linux程序被Killed,查看原因
    的头像 发表于 01-11 10:17 1760次阅读

    linux查看weblogic进程

    Linux操作系统中,WebLogic是一种常用的Java应用服务器,用于部署和管理企业级Java应用程序。为了确保WebLogic服务器正常运行,有时我们需要查看WebLogic进程以了解其状态
    的头像 发表于 12-05 16:07 730次阅读

    linux怎么查看网卡的收光功率?

    linux怎么查看网卡的收光功率? 在Linux系统中,可以使用一些命令和工具来查看网卡的收光功率。本文将介绍如何使用这些命令和工具来查看
    的头像 发表于 01-31 14:24 718次阅读