【问题标题】:Do static libraries, which depend on other slibs need the actual 'code' from them to work?依赖于其他 slib 的静态库是否需要它们的实际“代码”才能工作?
【发布时间】:2011-09-06 13:29:43
【问题描述】:

抱歉问题标题含糊不清,我只是想确定一些事情。

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

所以当我编写一个 slib:A,它使用另一个:B 的功能时,我所需要提供的只是 B 到 A 的标头,而且只有那些,即使 A 实际使用 B 的功能? 是吗?

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

所以在链接时,链接器获取 A.lib,它基本上只知道 B 的函数在其代码中的某个位置被调用,并以某种方式从 B.lib 填充该信息,使 A.lib 成为“完整的”,在 X 与它现在工作的部分链接之前?

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

【问题讨论】:

    标签: c++ linker dependencies static-libraries


    【解决方案1】:

    是的,你说得非常正确。依赖于静态库的可执行文件(和 DLL)在不解析这些依赖关系的情况下无法创建,但包含对其他静态库的依赖关系的静态库不需要在创建静态库时解析这些依赖关系。其实创建静态库的过程根本不涉及链接器。

    【讨论】:

    • 巴特沃思:太棒了,感谢您的澄清,不相信我对它的理解,因为除了网络资源之外,我自己也在学习它,而这种 slibs 的行为当时让我失望.
    【解决方案2】:

    除了说静态库实际上只是一堆收集到单个索引文件中的对象 (.o) 文件之外,不能真正添加​​ Neils 的答案。因此,适用于 .o 文件的内容适用于静态库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多