【发布时间】:2016-09-20 23:34:57
【问题描述】:
我有一堆.a 文件,它们的生成过程不受我控制,它们的来源也不受控制。当我使用它们进行链接时,我想知道它们的依赖关系(libA.a 依赖于libB.a,如果在libA.a 中有一些符号未定义但在libB.a 中定义),以便我可以将它们按正确的顺序排列在ld/gcc 命令行中。
我不想过度链接(即两次指定这些库),因为我想将这些依赖项持久化到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的工作方式。
标签: linux gcc static-libraries ld nm