如何使用ldd命令快速排查程序依赖问题?
- 主机动态
- 2025-05-28
- 10
Linux动态链接库查看工具ldd使用详解
在日常的Linux系统管理与开发中,ldd是一个高频使用的实用工具,用于快速查看可执行程序或共享库所依赖的动态链接库,无论是排查程序启动错误、验证环境配置,还是分析软件依赖关系,ldd都能提供关键信息,本文将以通俗易懂的方式详解ldd的使用方法、注意事项及常见问题。
ldd命令基础用法
安装与基本语法
大多数Linux发行版默认已安装ldd工具,若系统中未找到,可通过以下命令安装:
# Debian/Ubuntu系统 sudo apt install libc-bin # CentOS/RHEL系统 sudo yum install glibc-common
命令格式:
ldd [选项] <可执行文件或共享库>
核心功能演示
示例1:查看可执行程序的依赖库

输出结果示例:
linux-vdso.so.1 (0x00007ffd45df0000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f1a2b8e7000) ... libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a2b0d6000)
- 解读:
- => 左侧为依赖库名称,右侧为实际加载路径。
- not found 表示依赖缺失,需手动安装。
示例2:检查共享库依赖
ldd /usr/lib/x86_64-linux-gnu/libssl.so.3
高级参数与使用场景
常用参数说明
| 参数 | 功能描述 |
|---|---|
| -v | 显示详细信息(含版本号) |
| -u | 列出未使用的直接依赖 |
| -d | 执行重定位并报告缺失函数 |
| -r | 执行重定位并报告缺失对象/函数 |
示例:显示详细版本信息

实用场景
场景1:批量检查程序依赖
find /usr/bin -type f -executable -exec ldd {} ; 2>/dev/null
说明:遍历/usr/bin目录下所有可执行文件并输出依赖(忽略错误提示)。
场景2:调试动态链接问题
LD_TRACE_LOADED_OBJECTS=1 /path/to/program
等同于ldd命令,用于环境受限时手动调试。

注意事项与安全提示
-
不可用于非可执行文件
ldd仅适用于动态链接的可执行文件(ELF格式)或共享库(.so文件),若对静态编译文件使用ldd,会提示not a dynamic executable。
-
安全风险警示
- 避免对不可信程序使用ldd,恶意程序可能通过环境变量截持依赖加载路径。
- 替代安全方案: objdump -p /path/to/file | grep NEEDED
-
部分依赖可能不显示
通过dlopen()动态加载的库不会出现在ldd结果中,需结合代码分析。
- 使用包管理器搜索: # Ubuntu/Debian apt-file search libmissing.so.1 # CentOS/RHEL yum provides */libmissing.so.1
- 手动编译安装后,需更新动态链接器缓存: sudo ldconfig
- /etc/ld.so.conf 配置文件
- LD_LIBRARY_PATH 环境变量
- 编译时指定的rpath
常见问题解答
Q1:运行ldd时提示”命令未找到”
# 检查安装情况 which ldd || echo "需安装libc-bin/glibc-common包"
Q2:依赖显示not found如何解决?
Q3:为何不同环境下的依赖路径不同?
动态库路径由以下配置决定:
参考资料