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

大怪科学 20230902

  • Linux系统
  • 共享库
  • 动态库

一、开篇

在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印出所有信息

例如:

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

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

三、readelf命令

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

readelf--dynamic./app|grepNEEDED

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

四、objdump命令

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

objdump-p/path/to/program|grepNEEDED

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

五、pldd命令

六、/proc//maps

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

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

例如:

上述语句中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命令的变体。






审核编辑:刘清

查看全文

点赞

大怪科学

作者最近更新

  • Aigtek功率放大器在传感器测试领域研究中的应用
    大怪科学
    1天前
  • 泰科电子座椅位置传感器如何实现可靠保护
    大怪科学
    1天前
  • 中微爱芯推出高精度零漂移运算放大器AiP856X系列
    大怪科学
    3天前

期刊订阅

相关推荐

  • Wind River Studio为基于Linux的安全智能系统解决管理难题

    2022-03-23

  • 大联大诠鼎集团推出基于NOVATEK产品的安防监控录影主机方案

    2022-04-14

  • 大联大诠鼎集团推出基于NOVATEK产品的安防监控录影主机方案

    2022-04-15

  • 通用和Red Hat合作开发基于Linux的全新开源车载系统

    2022-05-11

评论0条评论

×
私信给大怪科学

点击打开传感搜小程序 - 速览海量产品,精准对接供需

  • 收藏

  • 评论

  • 点赞

  • 分享

收藏文章×

已选择0个收藏夹

新建收藏夹
完成
创建收藏夹 ×
取消 保存

1.点击右上角

2.分享到“朋友圈”或“发送给好友”

×

微信扫一扫,分享到朋友圈

推荐使用浏览器内置分享功能

×

关注微信订阅号

关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
      广告