如何列出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的
但我需要在模块级的信息,有谁知道如何获得这些信息?
答
静态库有没有这样的依赖关系列表。
静态库只不过是对象文件的存档。由于对象文件不知道它们依赖于哪些库,静态库也不知道。
我想说的原因是,静态库不是**链接**。因此,到目前为止,构建链中没有人负责将这些信息添加到其中。 –
@JanSmrč[email protected]程序员哥们但是如何在不知道信息的情况下生成静态库?例如,库A使用另一个库B中定义的函数。如果我们不添加类似'#include“B.h”'的函数,A可以生成吗?在这种情况下,我们可以说A取决于B吗? – bagebb
@bagebb就像其他任何对象文件一样。用来创建静态库的'ar'命令是一个简单而非常简单的* ARchiver *。对于静态库,您需要跟踪依赖关系,并明确链接它们。链接器无能为力,它所做的基本上就是提取目标文件并与它们链接。 –