"[ilink32] Fatal: out of memory " в C++ Builder
после обновления Embarcadero C++ Builder до новой версии наш проект внезапно не удается построить. Это происходит только с одним из наших проектов. Для большинства членов команды идентичный код строится без ошибок. На моем компьютере, linking терпит неудачу каждый раз.
На вкладке сборки:
[ilink32] Fatal: Out of memory
На вкладке output:
Build FAILED.
c:program files (x86)embarcaderostudio.0BinCodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
больше нет информации.
Если я включу связь с динамическим RTL проект ссылки без ошибок. Например, если в нашей цели отладки этот параметр включен, проект связывается в Debug, но не в Release.
Как я могу исправить эту проблему? Как я могу дать больше памяти для линкера?
1 ответов
объяснение
на вашем компьютере одна из куч компоновщика слишком мала для этого проекта. Проект связан с связь с динамическим RTL опция, потому что в этом случае компоновщику требуется меньше памяти, и куча просто оказывается достаточно большой.
можно использовать -GH
опция компоновщика для увеличения этой кучи, но сначала вы должны узнать, какая куча переполняется. Для этого включите диагностический вывод в компоновщике.
компиляция с диагностический выход
компиляция из командной строки:
call rsvars
MSBuild /v:diag YourProject.cbproj
компиляция из IDE:
- на Инструменты > Параметры > Параметры Среды
- изменить многословие до Диагностика
- после создания проекта прочитайте вывод из выход на сообщения окно
увеличение кучи размеры
в конце вывода вы должны найти размеры куч, похожие на это:
The "ILINK32" task is using "ilink32" from "c:\program files (x86)\embarcadero\studio.0\bin\ilink32.exe".
Turbo Incremental Link 6.75 Copyright (c) 1997-2016 Embarcadero Technologies, Inc.
Overrun on linker heap: tds
Linker Heaps
------------
system 0x030d4000 0x08000000
tds 0x08710000 0x09400000
c:\program files (x86)\embarcadero\studio.0\Bin\CodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
The command exited with code 2.
в этом случае, переполнение произошло в кучи tds
, поэтому нам нужно увеличить его размер. В левом столбце указано количество используемых байтов, а в правом-количество выделенных байтов. Новый размер должен быть больше значения, которое в данный момент находится в правом столбце.
в этом случае tds
размер 0x09400000
, поэтому мы увеличиваем его до 0x0f400000
со следующей опцией:-GHtds=0x0f400000
.
в IDE перейдите в Проект > Параметры > Компоновщик C++. Добавить -GHtds=0x0f400000
to Дополнительно > Дополнительные Параметры.
после сохранения параметров проекта, снова скомпилировать проект. Если же куча переполняется, нужно увеличить ее размер еще больше. Если другая куча переполняется, вам также необходимо увеличить ее размер.
, еслиcode
куча переполняется сейчас, и вы хотите увеличить ее размер к 0x0a000000
, вы должны изменить Дополнительные Опции до -GHtds=0x0f400000 -GHcode=0x0a000000
.
если вы увеличите кучу слишком много, вы получите ошибку LME288 вместо этого. Это означает, что вы достигли максимального размера для некоторой кучи. Если даже максимального размера недостаточно для вашего проекта, кажется, C++ Builder 10.2.3. удвоил максимальный размер, поэтому вы можете перейти на эту версию или скопировать ilink32.exe
из 10.2.3. установка для использования со старой версией C++ Builder.
больше подробности
- как сообщить о компиляторе C++ или проблеме компоновщика и обходных путях
- ошибка "невозможно выполнить ссылку" при компиляции в RAD Studio XE8
разве это не исправило проблему?
- если вы используете C++ Builder 10.0 или 10.1, попробуйте исправить компоновщик, как описано здесь:ошибка LME288 в C++ Builder
- если вы используете C++ Builder 10.2, исправление компоновщика не работает, но вы можете попробовать другие решения по той же ссылке
- C++ Builder 10.2. имеет настройки для управления кучами: обработка ошибок из памяти