EXE执行,当全链接库的变化,尽管增量链接(Exe performs full link when

2019-09-19 03:22发布

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

当我更改可执行项目中.cpp文件,编译+链接是非常快(<10秒)。
但是,当我改变我自己的图书馆内一个.cpp文件,可执行项目似乎是做对使用的每个库的完整链接。
我不那么肯定了,如果它实际上是一个完整的链接,但是从“vc90.pdb未找到”链接器警告,我可以告诉大家,它链接针对已没有改变一些外部库。

下面是该项目结构的例子:

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

改变.cpp文件MyLib ,然后将导致MyExe被链接到MyLibExtLib1ExtLib2ExtLib3 ,即使增量链接被打开。

一个完整的链接需要5分钟左右在我的项目,所以我问: 有什么办法来重新链接仅将更改的图书馆吗?

Answer 1:

这是一个介绍增量链接 。 它列出了会导致完全链接的情况。 其中之一是“这是与/羽/ Z7选项编译改变的对象。”,请检查您MyLib中抓住它。



Answer 2:

当一个静态库的变化总是会有在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/ ,具体如下:

这是由设计。 我们不能在静态库增量的变化联系起来。 这是从未有过任何支持。

罗纳德Laeremans时,Visual C ++团队

编辑-这证实了2015年VS使用静态库时,有增量链接: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with -视觉工作室,2015.aspx 。



文章来源: Exe performs full link when Library changes, despite incremental linking