将 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
没有更多信息。
如果我启用使用动态 RTL 链接,项目链接不会出现错误。例如,如果我们的调试目标启用了该设置,则项目会在“调试”中链接,但不会在“发布”中链接。
如何解决这个问题?如何为链接器提供更多内存?
在您的计算机上,其中一个链接器堆对于该项目来说太小。该项目使用 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
添加到高级 > 其他选项。 如果您使用的是 C++ Builder 10.2。或更新版本,您不需要使用命令行选项。您只需在同一设置页面上将
TDS 堆大小 设置为 0x0f400000
。保存工程选项后,再次编译工程。如果同一个堆溢出,则需要进一步增加其大小。如果另一个堆溢出,您也需要增加它的大小。
例如,如果
code
堆现在溢出,并且您想将其大小增加到
0x0a000000
,则应将附加选项 更改为
-GHtds=0x0f400000 -GHcode=0x0a000000
。可能出现的问题
ilink32.exe
。安装以与旧版本的 C++ Builder 一起使用。如果这些设置不起作用,并且您使用的是 C++ Builder 10.0 或 10.1,请尝试按照此处所述修补链接器:
C++ Builder 中的 LME288 错误。使用 C++ Builder 10.2 及更高版本,不需要修补链接器。
更多详情