visual-studio-2008 - Visual Studio 2008 中的 LNK1210

标签 visual-studio-2008 linker chromium incremental-linking

链接 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/

相关文章:

visual-studio - 有没有一种方法可以解锁被其他用户锁定的文件,而无需使用他们的帐户登录 VSTFS 2008?

visual-studio-2008 - Visual Studio 2008 App.config 缓存

c# - 将 DLL 嵌入已编译的可执行文件中

windows-installer - Chromium - 如何使用 mini_installer.exe 制作一个实际的安装程序

谷歌浏览器中的 HTML5 通知

.net - 为什么我的 .NET 类库中的所有引用都带有黄色感叹号?

c++ - 在 VS2008 上构建 64 位 Windows 会出现 C2632 错误

c++ - 调试 Visual Studio 链接器

assembly - .bss 中的 ELF 重定位(但相对于 .bss)是什么意思?

google-chrome - 从外部进程获取当前事件的 Chrome 或 chrome 选项卡的 URL