Компоновщик с памятью LNK1102

Мои коллеги и я попытались создать проект, содержащий несколько тысяч классов, но мы получаем ошибку LNK1102 (компоновщик из памяти). Я видел несколько советов в Интернете, таких как увеличение виртуальной памяти. Мы пробовали, но это не помогло. Мы также видели, что некоторые из них способствуют разным уровням предупреждения при компиляции кода. Парень предложил включить уровень 4 для предупреждений. Как это можно сделать? Есть ли другие предложения?

Ответ 1

У меня была такая же проблема при компиляции простой C:

"*LINK : fatal error LNK1102: out of memory*"

Решение для меня: удалить все файлы *.pdb(DEBUG). После этого все было связано без проблем. Так что, вероятно, файл pdb был дефектом в моем случае - дефект забавным способом вызвать эту ошибку компоновщика.

Ответ 2

Проект (щелкните правой кнопкой мыши) → Свойства → Свойства конфигурации → Линкера → Оптимизация → Ссылки → изменить на Непрерывные данные

Работал на моей машине!

Ответ 3

Если проект слишком велик, разделите его на несколько компонентов.

Это также может помочь в обслуживании.

Ответ 4

Если вы запускаете это на машине с Windows, откройте диспетчер задач, а затем перейдите на страницу производительности. Если вы видите, что использование файла страницы увеличивается до полного его заполнения, увеличьте его размер, по крайней мере, вдвое больше, чем ваш барабан. Если файл страницы не заполняется до того, как он выдает ошибку, убедитесь, что на компьютере достаточно места на диске.

Ответ 5

Я подозреваю, что линкер также занимает много времени, чтобы закончить. Поскольку вы говорите, что есть тысячи классов С++, моя первая мысль состояла в том, чтобы проверить, существует ли много методов встроенного класса.

Попробуйте следующее:

Выберите кучу классов, которые используются больше всего, сделайте все встроенные методы несинхронными, перемещая их из файла заголовка в файл реализации. Я испытал резкие изменения в времени связывания. Один проект, который мы прошли, длился от 15 минут до чистой 30 секунд. Это также должно повлиять на память процесса компоновки.

Удачи! //Magnus

Ответ 6

Если вы используете Visual С++ 6.0, избегайте загрузки рабочего пространства с диска "subst" или "сетевого отображения". Копируя проект в папку "C:\temp\MyProject \" и загружая рабочую область из этого места, на этот раз ошибка "LNK1102" исчезла для меня.

Надеюсь, что это поможет!

Ответ 7

Запустите 64-битную версию Linker? Недостаток: вы получите исполняемый файл amd64. (В отличие от набора инструментов 32 → 64 для кросс-компиляции нет 64- > 32-битного набора инструментов)

Ответ 8

Определенно контролировать фактическое использование памяти с помощью диспетчера задач при связывании. Закройте другие программы, чтобы увеличить доступную физическую память и, если это возможно, установите файл вашей страницы размером 4092 МБ.

Кроме того, это может помочь создать ссылку . Это позволит другим людям попытаться воспроизвести ваши проблемы с ссылками на других машинах.

Ответ 9

У меня такая же ошибка при инкрементальном построении большого проекта в VS 2008. Я просто очистил проект, удалю все файлы *.ilk, *.dll, *.exe и *.pdb и построил все еще раз.