Exe 在库更改时执行完全链接,尽管存在增量链接



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

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

下面是项目结构的示例:

  • 预编译的第三方库ExtLib1ExtLib2ExtLib3
  • 自己的库MyLib,使用第三方库ExtLib1
  • 拥有 Exe MyExe,使用MyLibExtLib1-3

MyLib中更改.cpp文件会导致MyExe链接到MyLibExtLib1ExtLib2ExtLib3,即使打开了增量链接

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

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

当静态库更改时,可执行文件将始终有一个完整链接,至少在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,视觉C++团队

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

相关内容

  • 没有找到相关文章

最新更新