"[ilink32] Fatal: Out of memory" in C++生成器
"[ilink32] Fatal: Out of memory" in C++ Builder
在将Embarcadero C++Builder更新到新版本后,我们的项目突然无法构建。这种情况只发生在我们的一个项目中。对于大多数团队成员来说,相同的代码构建起来没有错误。在我的电脑上,每次链接都会失败。
在构建选项卡中:
[ilink32] Fatal: Out of memory
在输出选项卡中:
Build FAILED.
c:program files (x86)embarcaderostudio18.0BinCodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
没有更多信息。
如果我启用链接与动态RTL,项目链接没有错误。例如,如果我们的Debug目标启用了该设置,则项目链接在Debug中,但不链接在Release中。
如何解决此问题?如何为链接器提供更多内存?
说明
在您的计算机上,其中一个链接器堆太小,不适合此项目。该项目使用Link with Dynamic RTL选项进行链接,因为在这种情况下,链接器需要更少的内存,而堆恰好足够大。
您可以使用-GH
链接器选项来增加该堆,但首先必须找出哪些堆溢出。为此,请在链接器中启用诊断输出。
使用诊断输出进行编译
从命令行编译:
call rsvars
MSBuild /v:diag YourProject.cbproj
从IDE编译:
- 转到工具>选项>环境选项
- 将详细更改为诊断
- 构建项目后,从消息窗口的输出选项卡读取输出
增加堆大小
在输出的末尾,您应该找到堆的大小,类似于以下内容:
The "ILINK32" task is using "ilink32" from "c:program files (x86)embarcaderostudio18.0binilink32.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)embarcaderostudio18.0BinCodeGear.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
,则应将Additional Options更改为-GHtds=0x0f400000 -GHcode=0x0a000000
。
如果你增加堆太多,你会得到LME288错误。这意味着您已经达到某个堆的最大大小。如果对于您的项目来说,即使是最大大小也不够,那么它似乎是C++Builder 10.2.3。已将最大大小增加了一倍,因此您可以迁移到该版本,或从10.2.3复制ilink32.exe
。安装以与旧版本的C++Builder一起使用。
更多详细信息
- 如何报告C++编译器或链接器问题和解决方法
- 在RAD Studio XE8中编译时出现"无法执行链接"错误
这没有解决问题吗
- 如果您使用的是C++Builder 10.0或10.1,请尝试按此处所述修补链接器:LME288 C++Builder中的错误
- 如果您使用的是C++Builder 10.2,则修补链接器不起作用,但您可以在同一链接中尝试其他解决方案
- C++编译器10.2。具有管理堆的设置:处理内存不足错误
当前使用C++Builder 11.2,调试版本的ilink64内存不足,而发布版本的则可以。go项目选项>C++编译器>优化
调试通常使用";禁用所有优化";,考虑到内存不足的问题;生成尽可能小的代码";,则ilink64成功。
在下面尝试,它不适用于我的情况https://docwiki.embarcadero.com/RADStudio/Sydney/en/Handling_Linker_Out_of_Memory_Errors
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp