依赖于其他slibs的静态库是否需要来自它们的实际“代码”才能工作?

时间:2011-06-01 18:47:25

标签: c++ linker dependencies static-libraries

对于模糊的问题标题感到抱歉,我只是想确定一些事情。

静态库不与其他静态库链接,对吧?

所以当我写一个slib:A,它使用另一个的功能:B,我必须提供的是B到A的标题,只有那些,即使A实际上使用B的功能? 是

只要exe:X,它使用A,将B.lib指定为链接器输入?

因此,在链接时,链接器接受A.lib,它基本上只知道B的一个函数在其代码中的某处被调用,并以某种方式从B.lib中填充该信息,使A.lib'整体',在X与现在的工作部分相关联之前?

这些问题背后的动机是摆脱一些链接器警告4006并丢弃双重定义,我认为应该这样做,如果这实际上是一种有效的方法。

2 个答案:

答案 0 :(得分:8)

是的,你已经非常正确了。如果没有解析这些依赖项,则无法创建依赖于静态库的可执行文件(和DLL),但是包含对其他静态库的依赖性的静态库不需要在静态库创建时解析这些依赖项。实际上,创建静态库的过程根本不涉及链接器。

答案 1 :(得分:2)

无法真正添加Neils答案,只是说静态库实际上只是收集到单个索引文件中的一大堆对象(.o)文件。那么.o文件适用于静态库。