尽管增量链接,但在库更改时,Exe会执行完整链接

时间:2012-07-05 13:05:16

标签: c++ visual-studio visual-c++ linker incremental-linking

我有一个MSVC ++项目,包含一个可执行文件,几个自己的静态库和一些预编译的静态第三方库。 exe使用增量链接以加快构建时间。

当我在可执行项目中更改.cpp文件时,编译+链接非常快(<10s)。
但是,当我在自己的一个库中更改.cpp文件时,可执行项目似乎正在针对它使用的每个库执行完整链接。
我不太确定它是否真的是一个完整的链接,但是从“找不到vc90.pdb”链接器警告,我可以告诉它链接到一些没有改变的外部库。

以下是项目结构的一个示例:

  • 预编译的第三方库ExtLib1ExtLib2ExtLib3
  • 自己的资源库MyLib,使用第三方资料库ExtLib1
  • 自己的执行MyExe,使用MyLibExtLib1-3

更改MyLib中的.cpp文件会导致MyExeMyLibExtLib1ExtLib2ExtLib3相关联,即使增量链接已开启。

在我的项目中,完整链接大约需要5分钟,所以我问:有没有办法只重新链接已更改的库?

2 个答案:

答案 0 :(得分:2)

这是对incremental linking的介绍。它列出了将导致完整链接的情况。其中一个是“使用/ Yu / Z7选项编译的对象已更改。”,检查您的MyLib是否捕获了它。

答案 1 :(得分:1)

当静态库发生变化时,可执行文件将始终存在完整链接,至少在Visual Studio 2013中,您可能会在输出窗口中看到类似的内容:

2>Link:
2>  LINK : library changed; performing full link

好消息:我在Visual Studio 2015中进行了快速测试,增量链接似乎按预期工作。

来源:大量的实验和环顾四周,遇到了同样的问题。另外,这个:http://www.pcreview.co.uk/threads/incremental-linking-and-multiple-projects.1431266/,具体来说:

  

这是设计的。当静态库发生变化时,我们无法逐步链接。   之前从未支持过。

     

Ronald Laeremans,Visual C ++团队

编辑 - 它确认VS 2015在使用静态库时具有增量链接:http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx