ldd
(List Dynamic Dependencies) 是一个用于显示可执行文件或共享库所依赖的共享库的工具。
ldd [选项] 文件...
-v
:显示详细信息(版本信息)-u
:显示未使用的直接依赖-d
:执行重定位并报告丢失的函数-r
:执行重定位并报告丢失的函数和数据ldd /usr/bin/program
输出显示程序运行所需的所有共享库及其路径。
ldd -r /path/to/binary
-r
选项会报告任何缺失的函数或数据。
ldd -u /path/to/binary
这有助于识别可以安全移除的依赖项。
ldd -v /path/to/binary
显示每个依赖库的详细版本信息。
ldd /usr/bin/program | grep "not found"
快速找出缺失的库。
ldd --version
确认当前 ldd 版本支持的架构。
LD_TRACE_LOADED_OBJECTS=1 /path/to/binary
这与直接运行 ldd
效果相同,但可以用于脚本中。
readelf -l /path/to/binary | grep interpreter
在 ldd 显示问题时,检查程序的动态链接器路径是否正确。
ldd
找出缺失的库使用包管理器查找提供该库的包:
# Debian/Ubuntu
apt-file search missing_library.so
# RHEL/CentOS
yum whatprovides */missing_library.so
如果库存在但路径不对:
# 临时设置库路径
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
# 永久设置(不推荐)
echo '/path/to/libs' >> /etc/ld.so.conf
ldconfig
# 查找库的实际位置
find / -name "missing_library.so*" 2>/dev/null
# 创建符号链接
ln -s /actual/path/to/library.so /expected/path/to/library.so
bash
objdump -p /path/to/binary | grep NEEDED
或
bash
readelf -d /path/to/binary | grep NEEDED
这些命令不会执行任何代码objdump
:更安全的依赖检查readelf
:ELF 文件分析ldconfig
:配置运行时绑定器strace
:跟踪系统调用,包括库加载通过熟练掌握 ldd 及其相关工具,您可以高效地诊断和解决 Linux 系统中的依赖关系问题。