我有一堆.a
文件,其生成过程不受我控制,也不是它们的来源。当我使用它们进行链接时,我想知道它们的依赖关系(libA.a
取决于libB.a
,如果某个符号在libA.a
中未定义,但在libB.a
中定义),以便我可以在命令行中将它们按正确的顺序排列。给定两个Linux静态库,如何判断一个是否依赖于另一个?
我不想做过多的链接(即指定这些库两次),因为我想将这些依赖关系保存到bazel的BUILD
文件中,所以我想知道确切的依赖关系。
我不知道是否有一些命令行工具,给出libA.a
和libB.a
,可以告诉libA.a
是否依赖于libB.a
?如果没有这样的话,我该如何编写这样的脚本?
注意:我对依赖关系的定义可能不是100%准确。让我知道是否有除定义/未定义符号以外的其他类型的依赖关系。
最简单的方法是处理的nm libA.a
和nm libB.a
输出,寻找U
符号,但也有许多类型的man nm
上市的符号,他们每个人都有不同的语义,所以我很担心,如果我可能会错过一些我使用这种简化的方法。
静态库不依赖于任何明确的其他库。 –
@IporSircer,它们没有像'.so'文件那样编码成文件格式的依赖项,但它们确实有依赖关系。如果'libA.a'依赖于'libB.a',那么在'ld'命令行'libA.a'应该放在'libB.a'之前,因为'ld'的工作方式。 –