在Linux上列出共享库依赖关系的编程方法

7

是否有编程方式(系统调用?)可以在Linux上列出共享库依赖项?而不是使用 ldd ...


1
在真正的答案到来之前,我可以给你一个通用的回答:你可以随时检查程序的源代码(在这种情况下是 ldd)以了解它的功能。 - Karoly Horvath
4个回答

4
readelf -Wa lib.so|grep NEEDED

4
readelf -d lib.so更加高效,因为它不需要解码所有信息。但是,它提供的依赖列表不像'ldd'那样完整(传递性),只包含直接依赖关系。 - Employed Russian

1

0
这是我在 Fedora 上使用的简单 bash 脚本,它依赖于 rpm 包的 find-requires,你可以查看 find-requires 内部使用了哪些工具。
#!/bin/bash
#
# Use rpm to recursively list dependencies of all files in a directory
#
# Syntax:
#   lsdep path/to/directory
# Example:
#   lsdep /usr/src/kernels/`uname -r`/

find $1 -type f -exec sh -c 'res=`echo '{}' | /usr/lib/rpm/find-requires`; [ -n "$res" ] && (echo;echo file '{}'; echo $res)' \;

0

将LD_TRACE_LOADED_OBJECTS环境变量设置为非空字符串,然后运行您的二进制文件。查看this手册页面。

LD_TRACE_LOADED_OBJECTS
    (ELF only) If set to non-empty string, causes the program to list its dynamic library dependencies, as if run by ldd(1), instead of running normally. 

如果我想检查共享库的依赖关系而不是二进制文件怎么办?在这种情况下,我无法运行共享库...谢谢。 - flyingbin
你可以这样在共享库上运行 ld.so:/lib/ld-2.11.2.so --list /lib/libc.so.6 - ks1322

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接