16

使用 Visual Studio 2008 SP1,
这一行:

LINK : debug\XXXXX.exe not found or not built by the last incremental link; performing full link

每次编译项目时都会出现,无论我做了多么小的更改。
这可能是什么原因?

4

6 回答 6

13

老问题,但以防万一,这仍然是一个问题(而且确实是..)。

增量链接与生成清单文件不兼容(Proj opts > Linker > Manifest File > Generate Manifest:是)。实际上,生成清单会修改 exe/dll,因此链接器必须进行完全链接。

有一些解决方法,有关更多详细信息: http ://chadaustin.me/2009/05/incremental-linking-and-embedded-manifests/

临时(也是最简单/最快)的解决方案是在开发期间禁用清单生成并在发布阶段再次启用它。虽然这会禁用应用程序的 XP/Vista 风格的 gui(控件看起来像“经典模式”)。

于 2010-04-17T18:01:34.500 回答
6

所以事实证明,如果我添加/INCREMENTAL到链接器命令行,问题就会自行解决。尽管事实上根据文档的默认行为是启用增量链接。

奇怪的。

于 2009-10-13T19:34:46.553 回答
4

真的是在黑暗中拍摄,但是,...

您是否将 XXXXX.exe 从其构建位置移动到其他位置?增量链接的重点是更改现有的 exe。如果没有,那就很难了...

另一个可能的原因是文件在构建后被更改(可能是由另一个工具)......

所有原因都列在/INCREMENTAL 的帮助项中

此外,如果出现以下任何一种情况,LINK 会执行完整链接:

增量状态 (.ilk) 文件丢失。(LINK 创建一个新的 .ilk 文件,为后续的增量链接做准备。)

.ilk 文件没有写入权限。(LINK 忽略 .ilk 文件并以非增量方式链接。)

.exe 或 .dll 输出文件丢失。

.ilk、.exe 或 .dll 的时间戳已更改。

更改了 LINK 选项。大多数 LINK 选项在构建之间更改时会导致完整链接。

添加或省略对象 (.obj) 文件。

使用 /Yu /Z7 选项编译的对象已更改。

于 2009-10-13T09:42:24.083 回答
3
  1. 从 Microsoft下载procmon 。
  2. 运行它,设置一个过滤器,以便您寻找对包含您的 .exe 名称的路径的访问。
  3. 做一个链接。
  4. 看看它有什么问题——它是否找到它,它是否在打开它时记录错误。Procmon 将记录每个打开、读取、关闭等文件。如果出现错误,它将记录它。
  5. 还要确保它可以找到 .ilk 文件——我认为它也需要它。
于 2009-10-13T15:21:12.067 回答
1

(也在黑暗中)一个可能的原因是您使用引用__DATE__宏的项目范围的标题。但在这种情况下,您也会看到完整的重新编译(是吗?)

于 2009-10-13T09:58:41.580 回答
1

就我而言,我昨天遇到了这个错误。

VS 设置code generation > runtime LibraryMulti-threaded Debug DLL (/MDd)而不是Multi-threaded Debug (/MTd).

如果我重新创建新项目,这个错误的设置会再次发生。我手动切换到/Mtd,然后没有错误发生。

于 2013-10-04T18:38:56.547 回答