文档章节

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

jesse-lin
 jesse-lin
发布于 2016/11/21 15:55
字数 594
阅读 25
收藏 1
点赞 0
评论 0

有时候我们会遇到这样一个场景: 一台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
中山
程序员
Day4 系统目录结构 ls命令、 文件类型 、alias命令

系统目录结构 |名称|类型|解释||:---|:-----|:-----|| /bin | 普通二进制文件 | bin是Binary的缩写,该目录下存放的是最常用的命令。| | /boot | 启动目录 | 该目录下存放的是启动Linux时使用...

杉下 ⋅ 2017/10/20 ⋅ 0

Day5 系统目录结构 ls命令、 文件类型 、alias命令

系统目录结构 |名称|类型|解释||:---|:-----|:-----|| /bin | 普通二进制文件 | bin是Binary的缩写,该目录下存放的是最常用的命令。| | /boot | 启动目录 | 该目录下存放的是启动Linux时使用...

杉下 ⋅ 06/02 ⋅ 0

Linux下so动态库查看与运行时搜索路径的设置

ldd命令 linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。 // 举个例子~$ ldd /bin/ls 如果ldd命令没有找到对应的共享库文件和其具体位置?...

chenyulancn ⋅ 04/24 ⋅ 0

Linux 中如何快速查看 C 库函数的头文件、库文件

Linux 中如何快速查看 C 库函数的头文件以及相应的函数信息? 使用man帮助或grep 1)man命令 函数名,则能够打印该函数的所有说明,当然这个函数必须是Linux-C本身就有的函数。 2)grep "key...

byxdaz ⋅ 05/20 ⋅ 0

Linux内核模块编程(列出系统中所有内核线程的程序名、PID 号、进程状态及进程优先级、父进程的PID)

(1) 设计一个模块,要求列出系统中所有内核线程的程序名、PID 号、进程状态及进程优先级、父进程的PID。 1.首先,我们开始编写模块代码,这是Linux内核编程的核心代码,代码如下: 2.头文件的...

tryantking ⋅ 04/21 ⋅ 0

Dry:一个命令行交互式 Docker 容器管理器

Docker 是一种所谓容器化的操作系统级的虚拟化软件。 基于 Linux 内核的 cgroup 和 namespace 等资源隔离特性,Docker 可以在单个 Linux 实例中运行多个独立的容器。 通过将应用依赖和相关库...

作者: Magesh Maruthamuthu ⋅ 05/07 ⋅ 0

linux下so动态库一些不为人知的秘密(上)

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

wangxuwei ⋅ 2016/05/08 ⋅ 0

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

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

自由男爵 ⋅ 2014/08/25 ⋅ 0

比起 Windows,怎样解读 Linux 的文件系统与目录结构?

原文出处:吕凯 Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习。 本文先对Windows和 Linux 上面文件系统原理、组织概念进行区分,并给出...

吕凯 ⋅ 06/06 ⋅ 0

hosts.allow和hosts.deny支持哪些服务

hosts.allow和hosts.deny支持哪些服务 一、背景简介 在linux上多用iptables来限制ssh和telnet,编缉hosts.allow和hosts.deny感觉比较麻烦比较少用。 aix没有iptables且和linux有诸多不同,多...

linjin200 ⋅ 04/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 19分钟前 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 23分钟前 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 23分钟前 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 31分钟前 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 32分钟前 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 35分钟前 ⋅ 0

Jira接入钉钉机器人

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.9Z9czj&treeId=257&articleId=106075&docType=1...

谢思华 ⋅ 37分钟前 ⋅ 0

微信公众号开发

一、开通微信服务号,填写URL,微信将想你发送验证信息。接收并处理微信发来的GET请求 二、处理客户向公众号发送的各种消息: 如文本、图片、乐音、视频、音乐 : 消息分为:1 请求消息(文本...

无敌小学僧 ⋅ 43分钟前 ⋅ 0

广州三本找Java实习经历

前言 只有光头才能变强 这阵子跑去面试Java实习生啦~~~我来简单介绍一下背景吧。 广州三本大三在读,在广州找实习。大学开始接触编程,一个非常平庸的人。 在学习编程时,跟我类似的人应该会...

Java3y ⋅ 45分钟前 ⋅ 0

php json_encode()不转义中文字符 和 斜杠"/"

php格式化json的函数 json_encode($value,$options) 其中有2个比较常用到的参数 JSON_UNESCAPED_UNICODE (中文不转为unicode ,对应的数字 256) JSON_UNESCAPED_SLASHES (不转义斜杠,对应的...

一只大橘子 ⋅ 50分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部