文档章节

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

jesse-lin
 jesse-lin
发布于 2016/11/21 15:55
字数 594
阅读 42
收藏 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
使用 top 命令了解 Fedora 的内存使用情况

如果你使用过 命令来查看 Fedora 系统中的内存使用情况,你可能会惊讶,看起来消耗的数量比系统可用的内存更多。下面会详细介绍内存使用情况以及如何理解这些数据。 内存实际使用情况 操作系...

06%
09/26
0
0
Ubuntu中snap包的安装、更新删除与简单使用

Ubuntu 16.04引入了snap包管理,它是一种全新的软件包安装管理方式。它和dpkg/apt有本质的区别。下面这篇文章就来给大家详细介绍了关于ubuntu中snap包的安装、更新删除与简单使用的相关资料,...

临江仙卜算子
08/29
0
0
linux下so动态库一些不为人知的秘密(上)

linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动...

wangxuwei
2016/05/08
21
0
Linux共享库两种加载方式简述

动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易。与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是在程序执行时按需载...

澈明
2012/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

visualVm 中的 visual GC说明

visual GC 不是 visualVM 自带的,需要安装插件。 步聚:菜单栏 (Tools) - > plugins - > Avaiable Plugins 中就选择安装 Spaces: 各个分代的内存使用情况。 特别说明:风格有分灰色部分,...

Canaan_
昨天
1
0
学习设计模式——生成器模式

1. 认识生成器模式 1. 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2. 组成: Builder:生成器接口,定义创建一个Product对象所需要的各个组件的操作,...

江左煤郎
昨天
0
0
C语言精要(第二章:基本数据类型)

2.1 C语言基本数据类型 在计算机术语中,把⼆进制数中的某⼀位数又称为⼀个⽐特(bit)。⽐特这个单位对于计算机⽽⾔,在度量上是最⼩的单位。除了⽐特之外,还有字节(byte)这个术语。⼀个...

ryanliue
昨天
0
0
实现下拉菜单多选框效果

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><li>工作意愿地:<%-- <c:forEach items="${list}" var="list"><input type="checkbox" value="${list......

lanjian28
昨天
1
0
scala的视图界定

在上一篇帧子的代码中,如果main函数中不是用字符串而是用数字则程序不能正常编译: class Pair[T <: Comparable[T]](val first:T,val second:T) //类型T必须要是Comparable接口的子类(即...

whoisliang
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部