如何修复"LME288/未知堆名称"警告?

32

突然间,我收到了LME288的链接器错误。

[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilc: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ild: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilf: 0x00010000 / 0x0a000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ils: 0x0003b000 / 0x08000000
[ilink32 Warning] Warning: unknown heap name   : 0x08000000 / 0x08000000
[ilink32 Warning] Warning: Error detected (LME288)
[ilink32 Error] Error: Unable to perform link

我没有安装 AV,但这个项目已经顺利运行了一年。我尝试了:

  • 禁用/启用增量链接器,没有任何变化……
  • 手动删除 /debug 中的所有文件,仍然没有变化……
  • 进行完整构建,没有变化……
  • 重启电脑,没有变化……

这个问题之前在这里被问到过,但是没有给出真正的解释或解决方案。

还有什么可以做来解决这个问题吗?

编辑:
我试图重新构建其他几个已经运行良好多年的项目,现在所有项目都出现 LME288 错误。


1
这个问题多年来已经被报告给QualityCentral多次:#102099#106085#109265 - Remy Lebeau
1
所有三份报告都没有任何解决方案或解决方法就被关闭了。我怀疑这个问题与项目无关。有一个人甚至重新安装了Builder,但仍然有这个问题。肯定是某些缓存文件被损坏了。我正在清理我的所有临时文件夹,看看是否有所帮助。 - Max Kielland
1
我清理了磁盘上的所有临时文件,清空了回收站,现在它又可以正常工作了。 - Max Kielland
1
@MaxKielland,最后一条评论建议类似的修复方法QC 102099。如果这足以成为线索,QC尝试解决问题会很好。 - M.M
2
这个Builder中的错误让我非常愤怒。我已经与Embarcadero支持团队进行了大量交流,试图找出问题的根源。所有的问题都始于在Windows 10上使用XE7,一路上有几件事情为我解决了短时间内的问题。安装XE8修复了XE7的问题。通过删除非版本控制文件来清理我的项目。然而,给我带来最大改善的一件事(几个月来一直很好,直到今天),是在我的PC上创建一个新用户帐户。现在我坐在这里,对我浪费的时间感到愤怒,因为这个错误,我再也不会自愿使用Builder了。 - Phil Williams
显示剩余4条评论
19个回答

23

在2020年1月15日,Embarcadero将RSP-12869的状态从“需要反馈”更改为“开放”,并将其分配给内部开发人员。

历史记录: 2017年4月发布的C++ Builder 10.2 Tokyo版本中,Embarcadero升级了链接器,并声称解决了问题:“链接器现在是大地址感知的,在64位系统上可以寻址高达4GB,是之前的两倍。(一些客户过去通过在PE头中切换位来使链接器成为LAE [sic]。由于代码不是为LAE感知而编写的,因此这种黑客行为会阻止增量链接和有时会影响其他功能。)” https://community.embarcadero.com/blogs/entry/what-s-new-in-c-builder-10-2-part-1-the-linker

然而,2017年5月24日,Ashleigh Quick报告说10.2 Tokyo的链接器仍然没有解决这个问题:RSP-12869。同样,@Ultralisk在2020年1月9日的评论中报告了同样的问题。

以下是一个解决方法:从10.2 Tokyo开始,您有一些新选项来控制LARGEADDRESSAWARE和链接器堆大小。Dieter Woellner在2017年10月26日报告说,临时将C++-Linker | Advanced | Advanced Options条目设置为“-GF:LARGEADDRESSAWARE”可以消除问题。但问题重新出现了,他发现如果将TDS Heapsize设置为低于0x08000000的值,则可以避免链接时出现错误/崩溃...目前为止。

=====================================

我是那些黑客链接器使其成为LAA的客户之一,从而干扰了增量链接(我不需要)并解决了我的问题。如果您不需要增量链接,请继续阅读。

=====================================

我通过在ilink32.exe中设置/LARGEADDRESSAWARE标志来解决了这个问题。最初的解决方案来自Hiroyuki Shimada,使用editbin,并于2016年1月12日发布在http://qc.embarcadero.com/wc/qcmain.aspx?d=134775上。他还将其应用于bcc32.exe;我不需要这样做。
作为公共服务,我在这里发布了我的修补过的ilink32.exe版本: 要使用任何一个版本,请将您RAD Studio二进制文件目录中的ilink32.exe重命名(例如RAD Studio Seattle的C:\Program Files (x86)\Embarcadero\Studio\17.0\bin,或Berlin的...\18.0\bin),然后将我的文件复制到该位置,并将其重命名为ilink32.exe
[注意:这些/LAA链接器可为许多用户解决问题,但并非所有用户;请参阅Andrew Legget于2016年7月25日在https://quality.embarcadero.com/browse/RSP-13247上的帖子]
这个问题已经存在很长时间,并不限于XE3、XE5、XE7、XE8...现在有一个长篇讨论/哀叹,位于https://quality.embarcadero.com/browse/RSP-13247,关于为什么在RAD Studio的一个版本中修复了此问题,但在后来的版本中撤回了;显然,/LAA“在使用静态RTL进行增量链接时导致失败”。根据Dennis Jones在该线程中发布的2016年3月28日下午12:14的帖子,/LAA补丁不解决其他链接器错误“EXE1825”或“内存不足”。
如果您想查看三种可以修补ilink32.exe的方法,请继续阅读...
  1. 使用可从http://cc.embarcadero.com/Item/30459下载的lamarker工具设置大地址标志(感谢Doug Hay在https://quality.embarcadero.com/browse/RSP-13247中的19/Jul/16帖子):

    lamarker -M -Filink32.exe

(您可以直接在C:\Program Files (x86)\Embarcadero\Studio\17.0\bin(或...\18.0\bin)目录中执行此操作;它将重命名原始的ilink32.exeilink32.exe.old -- 如果您有权限)

--OR--

  1. 如果您已经安装了MS Visual Studio,则可以使用其中的editbin。作为预备步骤,请复制bcc32.exeilink32.exe以防止UAC的阻止(并备份它们)

    copy "C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\bin\bcc32.exe" .

    copy "C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\bin\ilink32.exe" .

    editbin /LARGEADDRESSAWARE bcc32.exe

    editbin /LARGEADDRESSAWARE ilink32.exe

-- OR --

  1. 使用masm32包中的editbin设置大地址标志:

http://www.masm32.com/download.htm下载,它会创建c:\masm32\bin\editbin.exe。在MASM32安装过程中,我收到了一些警告(涉及序数201和203),但其自检通过了,我所需要的只是editbin.exe


2
在你的情况下,你是否真的遇到了大文件问题?一些使用LME288的其他人只有小项目,并且错误似乎是由于损坏或权限不正确的临时文件引起的;因此,也许相同的错误代码用于两个完全不同的问题。 - M.M
代码有 40 个模块,共计 50,000 行,规模中等。问题可能出现在一个干净的构建目录中,没有临时文件。 - circlepi314
2
我只想让你知道,你的公共服务受到了赞赏 - 你拯救了我们很多人摆脱了这场噩梦,谢谢! - syco_link
确认 lamarker.exe 修复程序在 XE3 版本的 ilink32.exe 上有效。原始版本被锁定(一直出现访问被拒绝错误),我不得不调整 ilink32 的安全设置,将其复制到我的桌面文件夹中,进行转换并复制回程序目录。但是,在工具成功运行后,链接不再出错。 - depwl9992
"在东京2017版中,Embarcadero已经升级了链接器" - 不对。他们什么都没修复。我仍然在一个不到700行代码的项目中看到错误! - Gabriel

13

我也遇到了在Windows 10上安装RAD Studio XE8的问题。在安装在Windows 7(x86)上,RAD Studio XE8可以正常工作。

升级到Windows 10(x86)后,我遇到了可怕的未知堆LME288错误。起初它没有出现在Windows 10上,但如果我安装了一些东西,它就会弹出。如果我将电脑恢复到Windows 7,则该错误将消失。

在网上进行了一些调查后,我找到了解决方案。ilink32.exe存在内存问题,您需要在计算机启动时启用3GB内存空间。以下是如果再次显示此错误时我所做的:

  1. 以管理员身份运行命令提示符。
  2. 输入以下内容(不使用引号)“bcdedit / set IncreaseUserVa 3072”
  3. 重新启动电脑。

这样做之后,ilink32可以正常工作。

我发现在安装了较新版本的Acronis True Image(2016)后,LME288错误又回来了。但是运行此处的bcdedit解决方案,修复了RAD Studio XE8链接器!


1
ilink32.exe没有使用/LARGEADDRESSAWARE标志进行编译。因此,我不明白这个解决方案怎么能起作用。 - truthseeker
也对我有用! - Samuli Hynönen

4

对我来说,只需以管理员身份运行XE8即可解决此问题。


4
我找到了一个看起来有效的解决方法。
似乎与临时文件损坏有关。在系统磁盘上进行“磁盘清理”后,我设法使其再次正常工作。
我删除了列表中的所有文件(所有复选框都被选中)和“清理系统文件”。
之后,即使不重新启动,我也可以编译和链接。 甚至增量链接也开始工作了!

3
感谢分享!这对我在C++ Builder XE6上也起作用了。对于其他遇到此问题的人,"Disk Cleanup" 是Windows工具(cleanmgr.exe),并非C++ Builder的功能。 - R. Schreurs
有时候它会有帮助,有时候不会。我希望我能取消我的点赞。 - truthseeker
1
我以前试过这个方法,看起来是有效的,但今天我花了3个小时尝试了所有我能想到的方法,但都没有成功。我已经忘记了我运行了多少次磁盘清理、重启、手动清理所有临时文件、以管理员身份运行等等。看起来解决问题的方法是改变虚拟内存的大小。我之前设置为“由操作系统管理”,但现在我手动设置了一个更大的值,现在它可以工作了...让我们看看能持续多久 :( - Rodrigo Gómez
1
@Migrate2Lazarus 整个错误都是巫术,人们出于绝望尝试了很多方法。这对某些人有效,对其他人则无效。临时目录不是唯一可能存在临时文件的地方,也没有规定它们会被覆盖,这取决于每个应用程序。 - Max Kielland
1
@MaxKielland - 不是关于C++ Builder或Delphi的问题,而是关于我们在Embarcadero商业产品中遇到的日常错误,这些错误我们已经习惯了不去抱怨。即使这些错误每小时导致IDE/编译器崩溃,它们也多年未被修复。 - Gabriel
显示剩余10条评论

4
作为Drewski,在升级到Windows 10 (x64)后,我遇到了LME288错误。
更改ilink32.exe的数据执行预防设置后,该错误消失了:
系统属性->高级系统设置->性能->设置->数据执行预防
为所有程序和服务打开DEP,除了我选择的那些: ilink32.exe

问题已解决。谢谢。 - Regis St-Gelais
这解决了我在Windows 7 Pro和C++ Builder XE4上的问题。我还添加了bcc32.exe用于DEP(ilinke32.exe有时不起作用)。非常感谢。 - sevenOfNine

2
在我的情况下,尝试其他所有提到的选项都没有起作用。看起来能解决问题的是手动设置虚拟内存量,位于我Windows 10机器的系统设置中。它被设置为由操作系统自动管理,但将其更改为手动值(即使最小值小于自动分配的值,并且实际上使用的是这个值)使链接器再次工作。在我的情况下,操作系统分配了大约1600MB。我将最小值设置为1024,最大值设置为3072,重新启动后,现在链接器正常工作。使用的数量显示为1024(即使推荐值为约1900)。

1
我有一个不同的解决方案,希望能帮助那些遇到问题的人。我尝试了所有建议的解决方案,但都没有起作用。磁盘清理也没有帮助。很明显这是C++Builder存在多年的一个bug,即使在2015年的XE8版本中仍未得到修复。幸运的是,我有一台工作环境正常的电脑,在那里相同的项目可以编译。我将该电脑输出目录(Win32/Debug)中的所有文件(*.exe, *.obj等)复制到出现问题的电脑上,这神奇地解决了C++ Builder的问题,之后所有的构建都开始正常工作。

1

针对XE10和Windows 10(x64)与Bitdefender IS 2016的修复:

Bitdefender -> 模块 -> 杀毒软件 -> 排除 -> 排除进程 -> 添加“...\bin\ilink32.exe” -> 允许


1
重新启动 W10 解决了 XE5 上的这个问题,但我正在禁用增量构建。

0
我通过确保Embarcadero安装文件夹(例如C:\ Program Files(x86)\ Embarcadero)被排除在所有杀毒软件扫描之外来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接