C++Builder XE10.2 [Ошибка ilink32] Неустранимо: превышен лимит памяти для блока кэша номеров строк в модуле <somethingsomething.cpp>

Полностью застрял на этапе компоновки при переносе группы проектов в C++ Builder XE10.2.
Win32 target, clang compiler.

Модуль, который вызывает сбой ilink32 с вышеуказанной ошибкой, использует boost::spirit classic.
То, что озадачивает, - то, что другой проект из той же группы проходит связывание OK, в то же время используя boost:: spirit, с гораздо более сложной грамматикой и намного большим кодом внутри.

Есть ли способ управления кучами ilink32 через cmdline или конфигурационные файлы?

Дамп компоновщика выглядит следующим образом:

[ilink32 Warning] Warning: BSS                 : 0x00000000 / 0x01000000
[ilink32 Warning] Warning: CODE                : 0x0023ebf4 / 0x01000000
[ilink32 Warning] Warning: DATA                : 0x0001acab / 0x01000000
[ilink32 Warning] Warning: DEBNAM              : 0x0012dae9 / 0x01000000
[ilink32 Warning] Warning: DEBSYM              : 0x001b7f29 / 0x01000000
[ilink32 Warning] Warning: DEBTYP              : 0x002a4bdb / 0x01000000
[ilink32 Warning] Warning: EXIT                : 0x00000006 / 0x01000000
[ilink32 Warning] Warning: Extdef flags        : 0x0000024e / 0x00004000
[ilink32 Warning] Warning: Extdefs             : 0x00000938 / 0x00004000
[ilink32 Warning] Warning: INIT                : 0x00000006 / 0x01000000
[ilink32 Warning] Warning: Import symbols      : 0x00000374 / 0x00100000
[ilink32 Warning] Warning: Line number cache   : 0x00048da4 / 0x00060000
[ilink32 Warning] Warning: OBJ symbols         : 0x00091c48 / 0x00400000
[ilink32 Warning] Warning: Public GSX          : 0x0000aa84 / 0x000c0000
[ilink32 Warning] Warning: Publics             : 0x0005fea4 / 0x000c0000
[ilink32 Warning] Warning: SegRelocs           : 0x0016cee8 / 0x00800000
[ilink32 Warning] Warning: StringBlock         : 0x0001709f / 0x01000000
[ilink32 Warning] Warning: Virdefs             : 0x0000aa74 / 0x00020000
[ilink32 Warning] Warning: BSS                 : 0x00000000 / 0x01000000
[ilink32 Warning] Warning: CODE                : 0x0029c762 / 0x01000000
[ilink32 Warning] Warning: DATA                : 0x000206bc / 0x01000000
[ilink32 Warning] Warning: DEBNAM              : 0x0022d1a3 / 0x01000000
[ilink32 Warning] Warning: DEBSYM              : 0x0031330a / 0x01000000
[ilink32 Warning] Warning: DEBTYP              : 0x002af5e9 / 0x01000000
[ilink32 Warning] Warning: EXIT                : 0x00000006 / 0x01000000
[ilink32 Warning] Warning: Extdef flags        : 0x00000254 / 0x00004000
[ilink32 Warning] Warning: Extdefs             : 0x00000950 / 0x00004000
[ilink32 Warning] Warning: INIT                : 0x00000006 / 0x01000000
[ilink32 Warning] Warning: Import symbols      : 0x00000000 / 0x00100000
[ilink32 Warning] Warning: Line number cache   : 0x0005fff4 / 0x00060000
[ilink32 Warning] Warning: OBJ symbols         : 0x00000000 / 0x00400000
[ilink32 Warning] Warning: Public GSX          : 0x0000ee48 / 0x000c0000
[ilink32 Warning] Warning: Publics             : 0x00086088 / 0x000c0000
[ilink32 Warning] Warning: SegRelocs           : 0x00000014 / 0x00800000
[ilink32 Warning] Warning: StringBlock         : 0x000373af / 0x01000000
[ilink32 Warning] Warning: Virdefs             : 0x0000ee48 / 0x00020000
[ilink32 Warning] Warning: unknown heap name   : 0x08000000 / 0x08000000
[ilink32 Error] Fatal: Exceeded memory limit for block Line number cache in module EsSqlFilterParser.cpp

1 ответ

По моему опыту, единственное решение - либо уменьшить количество кода в модуле, либо отключить символы отладки. Если первое не подходит, вы можете отключить символы отладки только для рассматриваемого файла, а не для всего проекта. В верхней части файла добавьте следующее:

#pragma option push
#pragma option -v- -y- 

... и внизу файла добавьте:

#pragma option pop
Другие вопросы по тегам