文档章节

查看Linux上程序或进程用到的依赖库

jesse-lin
 jesse-lin
发布于 2016/11/21 15:55
字数 594
阅读 33
收藏 1

有时候我们会遇到这样一个场景: 一台Linux电脑要执行某个还没有安装好的程序,如果有这个程序的安装包我们可以直接安装,或者联网安装,但如果没有这个程序的安装包电脑又不能联网,我们可以从另一台已经装了该程序的电脑(确保一样的平台和系统)把这个程序以及依赖库文件拷过去,因此,你需要知道该程序用到的依赖库。 下面介绍怎么查看Linux上程序或进程用到的依赖库。

查看可执行程序的共享库依赖关系

$ ldd /path/to/program

$ ldd /bin/ls
	linux-vdso.so.1 =>  (0x00007fff73b06000)
	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f0ba2672000)
	libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f0ba246a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ba20a3000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f0ba1e65000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0ba1c61000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0ba28b9000)
	libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f0ba1a5b000)

注意!并不推荐为任何不可信的第三方可执行程序运行ldd,因为某些版本的ldd可能会直接调用可执行程序来明确其库文件依赖关系,这样可能不安全。

取而代之的是用一个更安全的方式来显示一个未知应用程序二进制文件的库文件依赖,使用如下命令: $objdump -p /path/to/program | grep NEEDED

$ objdump -p /bin/ls | grep NEEDED
  NEEDED               libselinux.so.1
  NEEDED               libacl.so.1
  NEEDED               libc.so.6

查看运行进程的共享库依赖关系

如果你想要找出被一个运行中的进程载入的共享库,你可以使用pmap命令,它报告一个进程的内存映射,也能显示出运行进程的库文件依赖: $ sudo pmap <PID>

$ pmap 5271
5271:   vim /home/linjc/test/test/a.txt
0000000000400000   2420K r-x-- vim.gnome
000000000085d000      4K r---- vim.gnome
000000000085e000     96K rw--- vim.gnome
0000000000876000     60K rw---   [ anon ]
00000000023b7000   4276K rw---   [ anon ]
00007fba38e1f000     44K r-x-- libnss_files-2.19.so
00007fba38e2a000   2044K ----- libnss_files-2.19.so
00007fba39029000      4K r---- libnss_files-2.19.so
00007fba3902a000      4K rw--- libnss_files-2.19.so
00007fba3902b000     44K r-x-- libnss_nis-2.19.so
00007fba39036000   2044K ----- libnss_nis-2.19.so
00007fba39235000      4K r---- libnss_nis-2.19.so
00007fba39236000      4K rw--- libnss_nis-2.19.so
00007fba39237000     92K r-x-- libnsl-2.19.so
00007fba3924e000   2044K ----- libnsl-2.19.so
00007fba3944d000      4K r---- libnsl-2.19.so
00007fba3944e000      4K rw--- libnsl-2.19.so
00007fba3944f000      8K rw---   [ anon ]
00007fba39451000     36K r-x-- libnss_compat-2.19.so
00007fba3945a000   2044K ----- libnss_compat-2.19.so
00007fba39659000      4K r---- libnss_compat-2.19.so
00007fba3965a000      4K rw--- libnss_compat-2.19.so
00007fba3965b000      4K -----   [ anon ]
00007fba3965c000   8192K rw---   [ anon ]
00007fba39e5c000   5748K r---- locale-archive
......

© 著作权归作者所有

共有 人打赏支持
jesse-lin
粉丝 0
博文 5
码字总数 3264
作品 0
中山
程序员
查看Linux上程序或进程用到的库

ldd /path/to/program 要找出某个特定可执行依赖的库,可以使用ldd命令。这个命令调用动态链接器去找到程序的库文件依赖关系。 objdump -p /path/to/program | grep NEEDED 注意!并不推荐为...

自由男爵
2014/08/25
0
0
Linux 第16天 程序包管理

Linux 第16天自习 程序包管理 时间: 20180802 目录 Linux程序包管理 rpm包管理工具使用 yum在线包管理工具 源码编译安装程序 Linux程序包管理 linux上的大部分软件是开源的,所以他们的源码都...

Winthcloud
08/04
0
0
Linux 动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处。作者是一个Linux后台...

Foundation
2015/11/17
0
0
H3C+64位Ubuntu=校园网终于可以上了(愚人节快乐)

前言:虽然作为程序猿明显不够格,但折腾还是会的。总之,愚人节快乐! 可靠前提:H3C更新了最新版iNode 环境:64位Ubuntu12.04LTS(64位有点坑,缺各种32位依赖包,12.04版本以上安装iNode 都...

Mr_Why
2014/04/01
0
0
[动态库]深入分析Windows和Linux动态库应用异同

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 ...

龙宝宝
2011/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
31分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
39分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
16
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部