5

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

当我在可执行项目中更改 .cpp 文件时,编译 + 链接非常快(<10 秒)。
但是,当我在自己的一个库中更改 .cpp 文件时,可执行项目似乎正在针对它使用的每个库进行完整链接。
如果它实际上是一个完整链接,我不再那么确定了,但是从“vc90.pdb not found”链接器警告中,我可以看出它链接到了一些根本没有改变的外部库。

以下是项目结构的示例:

  • 预编译的第三方库ExtLib1ExtLib2以及ExtLib3
  • 自有库MyLib,使用第三方库ExtLib1
  • 拥有 Exe MyExe, 使用MyLibExtLib1-3

更改 .cpp 文件MyLib会导致MyExe链接到MyLib、和ExtLib1,即使打开了增量链接也是如此。ExtLib2ExtLib3

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

4

2 回答 2

2

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

于 2012-07-05T13:29:46.817 回答
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

于 2016-01-04T07:51:21.040 回答