将Embarcadero C ++ Builder更新为新版本后,我们的项目突然无法构建。这只发生在我们的一个项目中。对于大多数团队成员而言,相同的代码构建没有错误。在我的计算机上,每次都会失败。
在构建标签中:
[ilink32] Fatal: Out of memory
在“输出”标签中:
Build FAILED.
c:\program files (x86)\embarcadero\studio\18.0\Bin\CodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
没有更多信息。
如果我启用 Link with Dynamic RTL ,则项目链接没有错误。例如,如果我们的Debug目标启用了该设置,则项目将在Debug中链接,但不在Release。
中如何解决此问题?如何为链接器提供更多内存?
答案 0 :(得分:10)
在您的计算机上,其中一个链接器堆对于此项目而言太小。该项目与 Link with Dynamic RTL 选项相关联,因为在这种情况下,链接器需要更少的内存,并且堆恰好足够大。
您可以使用-GH
链接器选项来增加该堆,但首先您必须找出哪个堆溢出。为此,请在链接器中启用诊断输出。
从命令行编译:
call rsvars
MSBuild /v:diag YourProject.cbproj
从IDE编译:
在输出的末尾附近,你应该找到堆的大小,类似于:
The "ILINK32" task is using "ilink32" from "c:\program files (x86)\embarcadero\studio\18.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\18.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
添加到高级>其他选项。
保存项目选项后,再次编译项目。如果同一堆溢出,则需要进一步增加其大小。如果另一个堆溢出,则还需要增加其大小。
例如,如果code
堆现在溢出,并且您希望将其大小增加到0x0a000000
,则应将其他选项更改为-GHtds=0x0f400000 -GHcode=0x0a000000
。< / p>
如果增加堆太多,则会出现LME288错误。这意味着您已达到某些堆的最大大小。如果即使最大尺寸对于您的项目来说还不够,看起来似乎是C ++ Builder 10.2.3。已将最大大小加倍,因此您可以迁移到该版本,或从10.2.3复制ilink32.exe
。用于旧版C ++ Builder的安装。