2011-12-13 158 views
2

连接Chromium项目时,我收到以下错误:LNK1210在Visual Studio 2008

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一个similar question。不知何故,这是奇怪的,因为链接器已经在做完整的链接。当设置/INCREMENTAL:NO它成功链接,但增量链接被禁用。

有没有一种方法可以让我增加ILK大小限制,使增量链接?

回答

4

据微软的源,也有一些硬大小限制到ILK的大小,但它确实改变在一定程度上与VS版本和操作系统环境:

  • VS2005具有的ILK文件限制如果与/3GB option used,或
  • 一个768MB限制上一个Win32操作系统上运行,如果你在运行256MB
  • VS2008拥有256MB的对一只股票的Win32操作系统的ILK文件的限制,或
    • 一个384MB的限制Win64操作系统

来源:This MS Connect incident record,其中也提到了一些缺点,使用你可能要考虑/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,请确保您的构建过程使用VC\bin\amd64中的本机x64工具,而不是VC\bin\x86_amd64中的交叉工具。如果您正在使用常规VS IDE C++项目进行构建,则可能必须切换到makefile项目以强制使用本机x64工具。

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

+0

不幸的是`/ 3G`启动开关不支持我的操作系统(Windows 7 64位)。有没有其他方法可以增加ILK尺寸? – 2011-12-13 22:31:00