如何列出c/C++静态库的依赖关系?

问题描述:

对于静态库(.a文件),如何列出它的模块级依赖关系?如何列出c/C++静态库的依赖关系?

我知道一个共享库(的.so),我们可以使用objdump的readelf做到这一点:

objdump -p test.so 

readelf -d test.so 

我能得到这样的

需要libOne.so

的必需libc.so.6的

但对于静态库,我只能得到符号级的依赖性,例如,通过运行

objdump -T test.a 

我会得到一些东西像:

00000000 DF UND 00000000的QByteArray ::中期(INT,INT)常量

00000000 DF UND 00000000 QUrl :: fromEncoded(QByteArray中常量&)

00000000 DF UND 00000000 QFileInfo ::文件名()const的

但我需要在模块级的信息,有谁知道如何获得这些信息?

静态库没有这样的依赖关系列表。

静态库只不过是对象文件的存档。由于对象文件不知道它们依赖于哪些库,静态库也不知道。

+1

我想说的原因是,静态库不是**链接**。因此,到目前为止,构建链中没有人负责将这些信息添加到其中。 –

+0

@JanSmrč[email protected]程序员哥们但是如何在不知道信息的情况下生成静态库?例如,库A使用另一个库B中定义的函数。如果我们不添加类似'#include“B.h”'的函数,A可以生成吗?在这种情况下,我们可以说A取决于B吗? – bagebb

+0

@bagebb就像其他任何对象文件一样。用来创建静态库的'ar'命令是一个简单而非常简单的* ARchiver *。对于静态库,您需要跟踪依赖关系,并明确链接它们。链接器无能为力,它所做的基本上就是提取目标文件并与它们链接。 –