链接 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
有一个similar question对于VS2005。不知何故,这很奇怪,因为链接器已经在进行完整链接。当设置/INCRMENTAL:NO
时,链接成功,但增量链接被禁用。
有没有办法可以增加 ILK 大小限制以启用增量链接?
最佳答案
根据微软的消息,ILK 的大小有一些硬性限制,但它确实会随着 VS 版本和操作系统环境的不同而有所不同:
- VS2005 的 ILK 文件限制为 256MB
- VS2008 在普通 Win32 操作系统上的 ILK 文件限制为 256MB,或者
- 如果在带有
/3GB
option used 的 Win32 操作系统上运行,则限制为 384MB ,或 - 如果您在 Win64 操作系统上运行,则限制为 768MB
- 如果在带有
来源:This MS Connect incident record ,其中还提到了您可能需要考虑的使用 /3GB
的一些缺点。
由于您在 Win64 操作系统上运行(根据您的评论),我认为您可能会获得最大的 ILK 文件大小限制。 /3GB
选项仅适用于 32 位操作系统安装 - 当在 WoW64 32 位“大地址感知”应用程序下运行时,将获得完整的 4GB 地址空间 - 不需要 /3GB
选项。
但是等等 - 我有一个想法(可能是一个轻率的想法)。我不知道这是否真的可以解决您遇到的增量链接问题,即使可以,它仍然可能不值得,因为这可能很麻烦,尤其是维护方面:
您可能想看看使用 x64 native 链接器是否可以解决该问题 - 如果您安装 x64 编译器选项,VS 会为 x86/x64 目标和 x86/x64 主机的各种组合安装多组编译器/链接工具平台。就编译器而言,要生成 x86 代码,只有 Win32 编译器,但要生成 x64 代码,需要有 Win64 编译器和 Win32“交叉编译器”工具链。然而,对于链接器来说,任何一个链接器(Win32 或 Win64 - 链接器的“交叉”版本只是 Win32 版本的副本)都可以生成 x86 或 x64 目标。
如果 native Win64 链接器可以处理比 native Win32 链接器更大的 ILK 文件,我不会感到太惊讶,因此如果您当前的构建过程正在使用 Win32(或 Win32 'cross'),那么可能值得测试一下工具。
如果您的目标平台是 x64,请确保您的构建过程使用 VC\bin\amd64
中的 native x64 工具,而不是 VC\bin\x86_amd64 中的交叉工具
。如果您使用常规 VS IDE C++ 项目进行构建,则可能必须切换到 makefile 项目以强制使用 native x64 工具。
如果您的目标是 x86,事情可能会有点棘手 - 构建的编译阶段需要使用 VC\bin
中的 x86 工具,但对于链接阶段,您需要使用需要使用 VC\bin\amd64
中的 x64 native 链接器。指定 /machine:x86
选项,并确保您已将库搜索路径设置为查找 x86 库而不是 x64 库。这有效 - 至少对于一个小型测试程序来说是这样。但我喜欢我说的,我不知道它是否真的能帮助解决您遇到的增量链接问题,或者即使它能解决,也是值得的。
关于visual-studio-2008 - Visual Studio 2008 中的 LNK1210,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496843/