shell中ldd命令

在本文中, 我们来介绍一下ldd命令, 尽管它非常简单。在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。当然,你也可以用ldd --help或者man ldd来看其用法。 下面, 我们也来看看:

首先ldd不是一个可执行程序,而只是一个shell脚本。

再执行任何的程序,如ls等,看看程序的运行结果。

root@xxhui:/home/hui# ldd /bin/ls
linux-vdso.so.1 (0x00007ffeeffc3000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8e631c7000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f8e62fbe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e62c19000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f8e629a9000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e627a5000)
/lib64/ld-linux-x86-64.so.2 (0x00005599a18e8000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f8e6259f000)

ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)。


分享到:


相關文章: