在 Ubuntu 系统中,查看动态库(共享库)依赖的常用方法如下:
1. 使用 ldd 命令
ldd 是最直接的命令,用于显示可执行文件或共享库的依赖关系:
ldd /path/to/your/executable_or_library
示例输出:
linux-vdso.so.1 (0x00007ffd8a1e0000)
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f8d3a1b0000)
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f8d39d60000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d39b60000)
注意:
ldd会实际尝试加载库,可能存在安全风险(尤其是处理不可信文件时)。- 如果库未找到,会显示
not found。
2. 使用 objdump 查看详细信息
objdump 可以提取二进制文件的元数据,包括依赖库:
objdump -p /path/to/your/executable_or_library | grep NEEDED
示例输出:
NEEDED libssl.so.1.1
NEEDED libcrypto.so.1.1
NEEDED libc.so.6
3. 使用 readelf 工具
readelf 是更底层的工具,适合查看 ELF 文件的详细信息:
readelf -d /path/to/your/executable_or_library | grep 'NEEDED'
示例输出:
0x0000000000000001 (NEEDED) Shared library: [libssl.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
4. 树状依赖关系:lddtree(推荐)
lddtree 来自 pax-utils 包,可以以树状结构显示依赖关系:
# 安装工具
sudo apt install pax-utils
# 查看依赖树
lddtree /path/to/your/executable_or_library
示例输出:
executable => /usr/bin/executable (interpreter => /lib64/ld-linux-x86-64.so.2)
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
5. 处理库缺失问题
如果 ldd 显示 not found,可能是以下原因:
- 库未安装:使用
apt search <libname>查找并安装。 - 库路径未配置:通过
LD_LIBRARY_PATH临时添加路径:export LD_LIBRARY_PATH=/custom/lib/path:$LD_LIBRARY_PATH - 更新库缓存:运行
sudo ldconfig。
6. 高级调试
-
查看动态链接器日志:
LD_DEBUG=libs /path/to/executable 2> debug.log日志会记录详细的库加载过程。
-
检查运行时加载的库:
strace -e openat /path/to/executable 2>&1 | grep '\.so'
总结
- 快速查看依赖:
ldd或lddtree。 - 详细元数据:
objdump -p或readelf -d。 - 修复缺失库:安装软件包或配置路径。
1973

被折叠的 条评论
为什么被折叠?



