依赖于另一个静态库的静态库包含什么?

时间:2014-08-17 08:42:49

标签: c++ macos

我有3个项目:

Utils,编译为Utils.a

ExtraUtils编译为ExtraUtils.a并与Utils.a链接 和Main,编译为Main.exe并需要Utils.aExtraUtils.a才能运作。

ExtraUtils.a是否包含Utils.a?它是否包含对Utils.a的引用?编译Main时是否需要同时链接?

3 个答案:

答案 0 :(得分:1)

基本上,.a文件只是一组对象文件(.o)组合成一个文件。它还包含一些数据结构,允许编译器更容易地找到它需要的目标文件,但严格来说这是一种优化。

链接到.a时,链接器会查找每个未满足的符号,如果有的话,该库中的目标文件定义该符号,如果找到这样的对象,则它在可执行文件中包含该目标文件

现在创建.a文件涉及链接。它只涉及应该放入库中的目标文件的规范。

现在,当您创建ExtraUtils.a时,可以指定ExtraUtils.a还应包含Utils.a的所有对象。然后,与ExtraUtils.a关联不需要与Utils.a关联。但通常您会指定它只包含额外的文件,因为原始文件已经在Utils.a

答案 1 :(得分:0)

这取决于你如何创建.a档案。

在正常情况下,您只使用Utils的对象创建Utils.a,并使用额外文件创建ExtraUtils.a,但您也可以根据需要合并.a文件。

答案 2 :(得分:0)

  

ExtraUtils.a是否包含Utils.a

除非你以这种方式构建它。

  

它是否包含对Utils.a的引用?

  

编译Main时我是否需要同时链接?

相关问题