LNK1210 in Visual Studio 2008



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

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

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

是否有一种方法可以增加ILK大小限制以启用增量链接?

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

  • VS2005的ILK文件限制为256MB
  • VS2008在普通Win32操作系统上的ILK文件限制为256MB,或者
      如果在Win32操作系统上使用/3GB选项,
    • 384MB限制,或者
    • 768MB限制,如果你在Win64操作系统上运行

来源:此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"交叉")工具,这可能值得测试。

如果您的目标是x64,请确保您的构建过程使用VCbinamd64中的本机x64工具,而不是VCbinx86_amd64中的交叉工具。如果你正在使用常规的VS IDE c++项目来构建,你可能不得不切换到makefile项目来强制使用本地x64工具。

如果您的目标是x86,事情可能会有点棘手—构建的编译阶段需要使用VCbin中的x86工具,但是对于链接阶段,您需要使用VCbinamd64中的x64本机链接器。指定/machine:x86选项,并确保将库搜索路径设置为查找x86库而不是x64库。这是可行的——至少对于一个小的测试程序是可行的。但就像我说的,我不知道它是否真的对你遇到的增量链接问题有帮助,或者即使它有帮助,也值得这样做。

相关内容

  • 没有找到相关文章

最新更新