ldd是否显示所有递归依赖关系

问题描述 投票:0回答:2

假设我有一个A.so文件,其依赖项是从ldd中找到的

#ldd A
[...]
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007faaf9722000)
libxyz.so.49 => /usr/lib64/libxyz.so.49 (0x00007faaf5689000)

现在这是否意味着有了 libxml2.so.2 和 libxyz.so.49 的存在,一切都准备好让我使用 A.so。如果 libxyz.so.49 内部依赖于某些 libabc.so.2 怎么样?

我想澄清一下,当从 ldd 找到 A.so 的依赖项时,libabc.so.2 是否会列出,或者不会反映出来?如果不是,那么我如何找到所有相互依赖关系?链上缺少的相互依赖关系是否会导致调用到它并且缺少相同的结果导致核心/崩溃?

unix shared-libraries ldd
2个回答
26
投票

根据这个答案 ldd 显示给定二进制文件运行应用程序所需的所有动态库。这包括您要求的传递依赖项。


0
投票

是的,它调用动态链接器并检查动态依赖关系。请注意,使用

dlopen
手动加载的库将不会显示。

如果您想查看库依赖项的层次结构以及它们的依赖方式(

RPATH
runpath
等)。

您可以使用LibTree

© www.soinside.com 2019 - 2024. All rights reserved.