CentOS 7 系统中 ldd 命令的使用详解

ldd 命令简介
ldd(list dynamic dependencies)命令用于列出可执行文件或共享库的依赖关系,在Linux系统中,许多程序在运行时需要依赖其他共享库,ldd可以帮助我们了解这些依赖关系,从而更好地管理和维护系统。
ldd 命令的基本用法
ldd命令的基本用法如下:
ldd [选项] [文件名]
[选项]表示ldd命令的参数,[文件名]表示需要检查依赖关系的可执行文件或共享库。
ldd 命令的常用选项
以下是一些ldd命令的常用选项:
-v:显示详细的依赖关系信息。-d:仅显示动态依赖关系。-r:显示静态依赖关系。-c:显示动态和静态依赖关系。-u:显示未解析的依赖关系。
ldd 命令的实际应用

查看可执行文件的动态依赖关系
ldd /usr/bin/ls
执行上述命令后,ldd会列出ls命令的动态依赖关系,包括依赖的共享库及其版本信息。
查看共享库的依赖关系
ldd /lib64/libc.so.6
执行上述命令后,ldd会列出libc.so.6共享库的依赖关系。
查看未解析的依赖关系
ldd -u /usr/bin/ls
执行上述命令后,ldd会列出ls命令中未解析的依赖关系。
ldd 命令的输出解析
ldd命令的输出结果通常包含以下信息:

- 模块名称:表示依赖的共享库或可执行文件。
- 版本信息:表示依赖的共享库或可执行文件的版本。
- 模块路径:表示依赖的共享库或可执行文件的实际路径。
以下是一个ldd命令输出的示例:
libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f8b5c39e000)
libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f8b5c2b9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8b5c1b3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8b5c0b1000)
librt.so.1 => /lib64/librt.so.1 (0x00007f8b5bf90000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f8b5be89000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f8b5bc78000)
libm.so.6 => /lib64/libm.so.6 (0x00007f8b5ba67000)
libgcc_s.so.1 (CXXABI_1.3.8) => /usr/lib64/libgcc_s.so.1 (0x00007f8b5b9f6000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f8b5b7d3000)
libgcc_s.so.1 (GCC_4.8.5) => /usr/lib64/libgcc_s.so.1 (0x00007f8b5b6b2000) FAQs
问题:如何查看一个可执行文件的静态依赖关系?
解答:使用ldd命令的-r选项,如下所示:
ldd -r /usr/bin/ls
问题:ldd命令的输出结果中,如何找到依赖的共享库路径?
解答:在ldd命令的输出结果中,每个依赖项后面都跟着一个箭头(=>),箭头后面的内容即为依赖的共享库路径,在上述输出结果中,libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0表示libssl.so.1.0.0共享库的路径为/usr/lib64/libssl.so.1.0.0。

