2

链接 Chromium 项目时收到以下错误:

Linking...
LINK.EXE.SUPALINK_ORIG : ..\build\Debug\chrome.dll not found or not built by the last incremental link; performing full link
   Creating library ..\build\Debug\lib\chrome_dll.lib and object ..\build\Debug\lib\chrome_dll.exp
LINK.EXE.SUPALINK_ORIG : fatal error LNK1210: exceeded internal ILK size limit; link with /INCREMENTAL:NO

VS2005也有类似的问题。不知何故,这很奇怪,因为链接器已经在做完整的链接。设置/INCREMENTAL:NO时链接成功,但增量链接被禁用。

有没有办法可以增加 ILK 大小限制以启用增量链接?

4

1 回答 1

4

根据 Microsoft 的消息来源,ILK 的大小有一些硬性限制,但它确实在一定程度上因 VS 版本和操作系统环境而异:

资料来源:此 MS Connect 事件记录,其中还提到了使用/3GB您可能需要考虑的一些缺点。

由于您在 Win64 操作系统上运行(根据您的评论),我认为您可能获得了最大的 ILK 文件大小限制。该/3GB选项仅适用于 32 位操作系统安装——当在 WoW64 32 位“大地址感知”应用程序下运行时,可以获得完整的 4GB 地址空间——不需要该/3GB选项。

但是等等 - 我有一个想法(可能是一个轻率的想法)。我不知道这是否真的可以解决您遇到的增量链接问题,即使可以,它仍然可能不值得,因为它可能会带来很多麻烦,尤其是在维护方面:

您可能想看看使用 x64 本机链接器是否可以解决该问题 - 如果您安装 x64 编译器选项,VS 会为 x86/x64 目标和 x86/x64 主机平台的各种组合安装几组编译器/链接工具。就编译器而言,要生成 x86 代码,只有一个 Win32 编译器,但要生成 x64 代码,则需要一个 Win64 编译器和一个 Win32“交叉编译器”工具链。但是,对于链接器,似乎任何一个链接器(Win32 或 Win64 - 链接器的“交叉”版本只是 Win32 版本的副本)都可以生成 x86 或 x64 目标。

如果本机 Win64 链接器可以处理比本机 Win32 链接器更大的 ILK 文件,我不会感到惊讶,因此如果您当前的构建过程使用 Win32(或 Win32 'cross')工具,则可能值得测试。

如果您的目标是 x64,请确保您的构建过程使用的是原生 x64 工具,VC\bin\amd64而不是VC\bin\x86_amd64. 如果您使用常规 VS IDE C++ 项目来构建,您可能必须切换到 makefile 项目以强制使用本机 x64 工具。

如果您的目标是 x86,事情可能会有点棘手 - 构建的编译阶段需要使用 x86 工具VC\bin,但是对于链接阶段,您需要使用 x64 本地链接器VC\bin\amd64。指定/machine:x86选项并确保您已将 lib 搜索路径设置为查找 x86 库而不是 x64 库。这有效 - 至少对于一个小型测试程序。但我喜欢我说的,我不知道它是否真的有助于解决您遇到的增量链接问题,或者即使这样做也是值得的。

于 2011-12-13T22:14:58.993 回答