「ldd(1)」-

  LINUX MANUAL PAGES

打印共享对象依赖

命令语法格式

ldd [option]… file…

命令描述

命令ldd打印命令行上指定的每个程序或共享对象所需的共享对象(共享库)。它的使用和输出的一个例子如下:

# ldd /bin/ls

linux-vdso.so.1 (0x00007ffcc3563000)

libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)

libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)

libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)

libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)

libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)

/lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000)

libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)

在通常情况下,ldd调用标准动态链接器(请参阅ld.so(8)),并将LD_TRACE_LOADED_OBJECTS环境变量设置为“1”。这会导致动态链接器检查程序的动态依赖关系,然后查找(根据ld.so(8)规则)并加载满足这些依赖关系的对象。 对于每个依赖项,ldd显示匹配对象的位置以及加载它的(十六进制)地址。 (linux-vdso和ld-linux共享依赖项是特殊的;请参阅vdso(7)和ld.so(8))

Security

请注意,在某些情况下(例如,程序指定除ld-linux.so之外的ELF解释器),某些版本的ldd可能会尝试通过尝试直接执行程序来获取依赖关系信息(这可能会导致执行“在程序的ELF解释器中定义”的任何代码,也许是程序本身的执行)。 因此,您不应该对不受信任的可执行文件使用ldd,因为这可能导致执行任意代码。 处理不受信任的可执行文件时更安全的替代方法是:objdump -p /path/to/program | grep NEEDED

命令支持的选项及含义

-u, –unused
打印未使用的直接依赖项。(自glibc 2.3.4。)

-d, –data-relocs
执行重定位,并报告任何丢失的对象(仅限ELF)。

-r, –function-relocs
对数据对象和函数执行重定位,并报告任何缺少的对象或函数(仅限ELF)。

-v, –verbose
打印所有的信息,比如,包括符号的版本信息。

–version
显示ldd的版本信息。

–help
显示使用信息。

注意事项

命令ldd不适用于a.out共享库。

命令ldd不适用于在将ldd支持添加到编译器版本之前构建的一些极其旧的a.out程序。 如果在其中一个程序上使用ldd,程序将尝试使用argc=0运行,结果将无法预测。

相关手册

pldd(1), sprof(1), ld.so(8), ldconfig(8)

This page is part of release 4.10 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages

参考文献

  • man 1 ldd, Version 2.27-3

更新日志

  • 11/15/2018 创建文章