将项目组迁移到C ++ Builder XE10.2时,完全停留在链接阶段。
Win32目标,clang编译器。
导致ilink32因上述错误而失败的模块,使用boost :: spirit classic。
令人困惑的是,同一组中的另一个项目通过了OK链接,同时还使用了boost :: spirit,语法更加复杂,并且内部代码更大。
有什么方法可以通过cmdline或配置文件控制ilink32堆吗?
链接器转储如下:
[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
最佳答案
以我的经验,唯一的解决方案是减少模块中的代码量或禁用调试符号。如果前者不是选项,则可以仅针对相关文件而不是整个项目禁用调试符号。在文件顶部,添加以下内容:
#pragma option push
#pragma option -v- -y-
...然后在文件底部添加:
#pragma option pop
关于c++ - C++ Builder XE10.2 [ilink32错误]致命:模块<somethingsomething.cpp>中的块行号缓存的内存限制超出限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43673158/