我有3个项目:
Utils
,编译为Utils.a
ExtraUtils
编译为ExtraUtils.a
并与Utils.a链接
和Main
,编译为Main.exe
并需要Utils.a
和ExtraUtils.a
才能运作。
ExtraUtils.a
是否包含Utils.a
?它是否包含对Utils.a
的引用?编译Main
时是否需要同时链接?
答案 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时我是否需要同时链接?
是