在x86下,为了查看程序所依赖的库,可使用linux

但若是是使用arm-linux-gcc 等交叉编译环境编译出来的程序,则要使用web

库用于将类似函数打包在一个单元中。而后这些单元就可为其余开发人员所共享,并所以有了模块化编程这种说法 — 即,从模块中构建程序。Linux 支持两种类型的库,每一种库都有各自的优缺点。静态库包含在编译时静态绑定到一个程序的函数。动态库则不一样,它是在加载应用程序时被加载的,并且它与应用程序是在运行时绑定的。图 1 展现了 Linux 中的库的层次结构。shell

使用共享库的方法有两种:您既能够在运行时动态连接库,也能够动态加载库并在程序控制之下使用它们。本文对这两种方法都作了探讨。ide

静态库较适宜于较小的应用程序,由于它们只须要最小限度的函数。而对于须要多个库的应用程序来讲,则适合使用共享库,由于它们能够减小应用程序对内存(包括运行时中的磁盘占用和内存占用)的占用。这是由于多个应用程序能够同时使用一个共享库;所以,每次只须要在内存上复制一个库。要是静态库的话,每个运行的程序都要有一份库的副本。模块化

GNU/Linux 提供两种处理共享库的方法(每种方法都源于 Sun Solaris)。您能够动态地将程序和共享库连接并让 Linux 在执行时加载库(若是它已经在内存中了,则无需再加载)。另一种方法是使用一个称为动态加载的过程,这样程序能够有选择地调用库中的函数。使用动态加载过程,程序能够先加载一个特定的库(已加载则没必要),而后调用该库中的某一特定函数(图 2 展现了这两种方法)。这是构建支持插件的应用程序的一个广泛的方法。函数

Linux 提供了不少种查看和解析 ELF 对象(包括共享库)的工具。其中最有用的一个当属命令,您可使用它来发送共享库依赖项。例如,在dl应用程序上使用ldd命令会显示以下内容:spa

mtj@camus:~/dl$ ldd dl

linux-gate.so.1 => (0xffffe000)

libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fdb000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7eac000)

/lib/ld-linux.so.2 (0xb7fe7000)

mtj@camus:~/dl$

ldd所告诉您的是:该 ELF 映像依赖于 linux-gate.so(一个特殊的共享对象,它处理系统调用,它在文件系统中无关联文件)、libdl.so(DL API)、GNUC库(libc.so)以及 Linux 动态加载器(由于它里面有共享库依赖项)。插件

命令是一个有不少特性的实用程序,它让您可以解析和读取 ELF 对象。有一个有趣的用途,就是用来识别对象内可再定位的项。对于咱们这个简单的程序来讲(清单 2展现的程序),您能够看到须要再定位的符号为:

mtj@camus:~/dl$ readelf -r dl

Relocation section '.rel.dyn' at offset 0x520 contains 2 entries:

Offset Info Type Sym.Value Sym. Name

08049a3c 00001806 R_386_GLOB_DAT 00000000 __gmon_start__

08049a78 00001405 R_386_COPY 08049a78 stdin

Relocation section '.rel.plt' at offset 0x530 contains 8 entries:

Offset Info Type Sym.Value Sym. Name

08049a4c 00000207 R_386_JUMP_SLOT 00000000 dlsym

08049a50 00000607 R_386_JUMP_SLOT 00000000 fgets

08049a54 00000b07 R_386_JUMP_SLOT 00000000 dlerror

08049a58 00000c07 R_386_JUMP_SLOT 00000000 __libc_start_main

08049a5c 00000e07 R_386_JUMP_SLOT 00000000 printf

08049a60 00001007 R_386_JUMP_SLOT 00000000 dlclose

08049a64 00001107 R_386_JUMP_SLOT 00000000 sscanf

08049a68 00001907 R_386_JUMP_SLOT 00000000 dlopen

mtj@camus:~/dl$

从这个列表中,您能够看到各类各样的须要再定位(到 libc.so)的C库调用,包括对 DL API(libdl.so)的调用。函数__libc_start_main是一个C库函数,它优先于程序的main函数(一个提供必要初始化的 shell)而被调用。

其余操做对象文件的实用程序包括:objdump,它展现了关于对象文件的信息;nm,它列出来自对象文件(包括调试信息)的符号。还能够将 EFL 程序做为参数,直接调用 Linux 动态连接器,从而手动启动映像:

mtj@camus:~/dl$ /lib/ld-linux.so.2 ./dl

> libm.so expf 0.0

1.000000

>

另外,可使用 ld-linux.so 的--list选项来罗列 ELF 映像的依赖项(ldd命令也如此)。切记,它仅仅是一个用户空间程序,是由内核在须要时引导的。

linux 查询程序的依赖库,linux下查看程序依赖的库相关推荐

  1. Linux入门进阶第四天(下)——程序管理(补充内容)

    1.PID 触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置. 同一个程序 ...

  2. wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解

    一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...

  3. 小技巧(1):Linux 下查看进程依赖,不同的16进制编辑器,与关掉Windows驱动签名认证

    最近又学到了一些零零碎碎的 Linux.Windows 命令,和一些可能今后会用得着的小技巧,怕自己忘记,所以把它们写在博客里面提醒一下自己,免得到时候再花费大量时间去百度.Google 找文章. L ...

  4. linux 查询内存和核心数,Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数...

    1.查看物理CPU的个数 [root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc ...

  5. linux 查询文件大小大于1g_常用Linux命令

    最近一直在学习Linux,分享一手Linux中常用的命令,Linux之于生信,下图可以展现的淋漓尽致: 一如既往的上干货: 一.正则表达式:正则表达式是包含匹配.grep.awk.sed命令支持正则表 ...

  6. Linux查询某个端口被谁占用,如何查看某个端口被谁占用(Linux如何查询哪些端口被占用)...

    如何确定端口号是不是在Linux或类unix系统软件下占有?怎么检查什么端口号已经Linux网络服务器上被占有?Linux系统软件怎么使用cmd查验端口号是不是早已在占有? Linux端口占用查看 查 ...

  7. windows7怎么安装python库_windows7 下安装Python的PIL库

    前言: Python中最常用的图像处理库是PIL(PythonImaging Library),其中Image类是PIL库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图 ...

  8. 通过修改程序解决Vista/Win7/Win8下应用程序兼容性问题

    在Vista/Win7/Win8下,有一个系统兼容性助手功能,使得程序在安装完成后或运行时,总是弹出应用程序兼容性助手相关的提示,很是烦人,事实上我们的程序兼容性是没有问题的,只不过是在程序中没有指定 ...

  9. dos下查询网络内的计算机名,dos下查看ip_dos下查看ip地址_dos查看局域网ip_dos命令查本机ip的命令...

    你是否正在寻找关于dos下查看ip的内容?让我把最全的东西奉献给你: dos命令查本机ip的命令 来源:本站原创 作者:本站2011年06月18日 16:10 分享 [导读] dos查本机ip的命令 ...

最新文章

  1. IssueVission的命令处理
  2. 力扣【每日温度】leetcode-739.每日温度:单调栈解法
  3. Hihocoder 1370 快乐数字
  4. 阻塞、非阻塞、同步与异步
  5. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  6. 马尔可夫链 (Markov Chain)是什么鬼
  7. android qq红点,Android高仿QQ小红点功能
  8. tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题
  9. Qlik助力新西兰最大私人医院提高病患护理水平
  10. blog.1z5k.com
  11. 用计算机弹琴慢速度,弹钢琴的速度如何才能快起来?
  12. 使用postman下载文件
  13. 贱人工具箱使用技巧系列1——旋转复制
  14. Android中的传感器之---陀螺仪传感器
  15. 计算机word页面设置A5,word页面缩放怎样设置
  16. 计算机系统图标文件,电脑软件的图标图片文件都集中在哪个文件夹??
  17. namespace什么意思
  18. R数通杀思路分享-反部分混淆解析canvas和fonts指纹
  19. 修复win7开机很丑
  20. xshell免费版绿化版下载

热门文章

  1. Jetpack组件WorkManager简单demo
  2. 如何通俗地理解信息增益?
  3. JS中的DOM查询(2),(parentNode、previousSibling、nextSibling)
  4. 关于 Mac 上的 SD 和 SDXC 卡插槽
  5. VLAD特征(vector of locally aggregated descriptors)
  6. VLAD学习总结和python实现
  7. matlab图像处理:一个提取缝隙的图像处理算法
  8. java删除服务器上文件
  9. XWPFTableCell设置字体样式及大小导致的样式问题
  10. CreateThread 线程操作与 _beginthreadex 线程安全(Windows核心编程)