链接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操作系统上使用
- 384MB限制,或者
- 768MB限制,如果你在Win64操作系统上运行
/3GB
选项,
来源:此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库。这是可行的——至少对于一个小的测试程序是可行的。但就像我说的,我不知道它是否真的对你遇到的增量链接问题有帮助,或者即使它有帮助,也值得这样做。