C++Builder XE10.2 [ilink32 Error] Fatal: Exceeded memory limit for block Line number cache in module <somethingsomething.cpp>

2

Completely stuck on linking stage, when migrating group of projects to C++Builder XE10.2.
Win32 target, clang compiler.

The module, which causes ilink32 to fail with abovementioned error, uses boost::spirit classic.
What is puzzling, is that another project from the same group passes linking OK, while using boost::spirit as well, with much more complex grammar, and much bigger code inside.

Is there any way to control ilink32 heaps through cmdline, or configuration file(s)?

The linker dump is as follows:

[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
c++
c++builder
boost-spirit

1 Answer

0

In my experience, the only solution is to either reduce the amount of code in the module or disable debugging symbols. If the former isn't an option, you can disable debugging symbols for just the file in question rather than the entire project. At the top of the file, add the following:

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

...and at the bottom of the file, add:

#pragma option pop
answered on Stack Overflow Oct 2, 2018 by Stephen Spangler • edited Oct 2, 2018 by Draken

User contributions licensed under CC BY-SA 3.0