【发布时间】:2011-07-12 07:20:21
【问题描述】:
是否有任何编程方式(系统调用?)列出 Linux 上的共享库依赖关系?而不是使用ldd ...
【问题讨论】:
-
在真正出现之前只是一个通用的答案:您可以随时检查程序的源代码(在本例中为
ldd)以了解它的作用。
标签: linux linker shared-libraries dependency-management
是否有任何编程方式(系统调用?)列出 Linux 上的共享库依赖关系?而不是使用ldd ...
【问题讨论】:
ldd)以了解它的作用。
标签: linux linker shared-libraries dependency-management
readelf -Wa lib.so|grep NEEDED
【讨论】:
Gentoo Linux 有一个 lddtree.sh http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-projects/pax-utils/lddtree.sh?revision=1.22&content-type=text%2Fplain
您可能会发现它很有帮助。
【讨论】:
将 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.
【讨论】:
这是我自己在 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)' \;
【讨论】: