linux 命令之ldd

ldd命令是用来查看程序运行时所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题

ldd使用方式:
ldd [option] file
option:
–version : 打印ldd的版本号
-v –verbose: 打印所有信息
-d –data-relocs:执行符号重部署,并报告缺少的目标对象(只对ELF格式适用)
-r –function-relocs:对目标对象和函数执行重新部署,并报告缺少的目标对象和函数(只对ELF格式适用)
-u –unused:打印未使用的直接依赖关系
–help:用法信息

ldd命令原理

  • ldd不是可执行程序,而是一个shell脚本(可以使用vi查看内容)
  • ldd能够显示可执行模块的依赖,其原理是通过设置环境变量,如: LD_TRACE_LOADED_OBJECTS。当 LD_TRACE_LOADED_OBJECTS环境变量不为空时,所有可执行的程序在运行时,都会只显示模块的依赖,而程序不真正执行。比如:
$ echo  $LD_TRACE_LOADED_OBJECTS

$ export  LD_TRACE_LOADED_OBJECTS=1
$ ls
    linux-gate.so.1 =>  (0xb77d7000)
    libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb77a5000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb779c000)
    libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb7792000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75ed000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb75e8000)
    /lib/ld-linux.so.2 (0xb77d8000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb75cd000)
    libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb75c7000)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。