Согласно источнику Microsoft, существуют жесткие ограничения на размер ILK, но он в некоторой степени зависит от версии VS и среды ОС:
- VS2005 содержит файл ILKограничение 256 МБ
- VS2008 имеет ограничение файла ILK 256 МБ на стандартной ОС Win32 или
- ограничение 384 МБ при работе на ОС Win32 с использованием опции
/3GB
или - ограничение 768 МБ, если вы работаете в операционной системе Win64
Источник: Эта запись инцидента MS Connect В нем также упоминаются некоторые недостатки использования /3GB
, которые вы, возможно, захотите принять во внимание.
Поскольку вы работаете в операционной системе Win64 (согласно вашему комментарию), я думаю, что вы, вероятно, получаетесамый большой предел размера файла ILK.Опция /3GB
применяется только к установкам 32-битных ОС - при запуске под WoW64 32-битные приложения с поддержкой больших адресов получают 4 ГБ адресного пространства - опция /3GB
не требуется.
Но подождите - у меня есть идея (возможно, заурядная идея).Я не знаю, сработает ли это на самом деле для решения проблемы инкрементного соединения, с которой вы сталкиваетесь, и даже если это сработает, это все равно может не стоить, потому что это, вероятно, много проблем, особенно в плане обслуживания:
Возможно, вы захотите узнать, можно ли обойти проблему с помощью встроенного компоновщика x64 - если вы установите опцию компилятора x64, VS установит несколько наборов инструментов компилятора / компоновки для различных комбинаций целевого объекта x86 / x64 и хоста x86 / x64.Платформа.Что касается компилятора, для генерации кода x86 существует только компилятор Win32, но для генерации кода x64 есть как компилятор Win64, так и Win32 'кросс-компилятор' toolchain.Однако для компоновщика представляется, что любой из компоновщиков (Win32 или Win64 - «перекрестная» версия компоновщика является просто копией версии Win32) может генерировать цель x86 или x64.
Это неМеня не слишком удивит, если собственный компоновщик Win64 может обрабатывать файлы ILK большего размера, чем собственный компоновщик Win32, поэтому, возможно, стоит проверить, использует ли ваш текущий процесс сборки инструменты Win32 (или «кросс») Win32.
Если вы ориентируетесь на x64, убедитесь, что в процессе сборки используются собственные инструменты x64 в VC\bin\amd64
вместо перекрестных инструментов в VC\bin\x86_amd64
.Если для сборки вы используете обычный проект VS IDE C ++, вам, возможно, придется переключиться на проект makefile, чтобы использовать собственные инструменты x64.
Если вы ориентируетесь на x86, то, возможно,немного сложнее - на этапе компиляции сборки необходимо использовать инструменты x86 в VC\bin
, но затем для этапа компоновки вам нужно будет использовать собственный компоновщик x64 в VC\bin\amd64
.Укажите параметр /machine:x86
и убедитесь, что у вас задан путь поиска lib для поиска библиотек x86 вместо библиотек x64.Это работает - по крайней мере, для небольшой тестовой программы.Но, как я уже сказал, я не знаю, поможет ли это на самом деле решить проблему с инкрементной связью, с которой вы столкнулись, или это будет стоить проблем, даже если это произойдет.