如何修复 "LME288/Unknown heap name" 警告?
How to fix "LME288/Unknown heap name" warning?
突然间,我收到 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,该项目已经 运行 一年多了。我试过:
- 增量链接器disabled/enabled,没有区别...
- 手动删除 /debug 中的所有文件,仍然没有变化...
- 完整版本,没有区别...
- 重启电脑,没有变化...
here之前有人问过这个问题,但没有提出真正的解释或解决方案。
我还能做些什么来解决这个问题?
编辑
我试图重建几个多年来一直 运行 正常的其他项目,现在我的所有项目都出现 LME288 错误。
我找到了一个似乎有效的解决方法。
这似乎与损坏的临时文件有关。我在我的系统磁盘上做了 "Disk Cleanup" 之后,我设法让它再次工作。
我删除了列表中的所有文件(选中所有复选框)以及 "Clean up system files"
之后我可以编译 link,甚至无需重新启动。
甚至增量 link 又开始工作了!
我有一个不同的解决方案,希望能帮助遇到这个问题的人。
我尝试了所有方法,none 之前建议的解决方案对我有用。磁盘清理没有帮助。这显然是 C++Builder 中存在多年的错误,即使在 2015 年的 XE8 中也仍未修复。
幸运的是,我有另一台有工作环境的电脑,同样的项目在那里编译。我将输出目录 (Win32/Debug) 中的所有文件(*.exe、*.obj 等)从那台计算机复制到我遇到问题的那台计算机上,然后神奇地直接设置了 C++ Builder;之后的所有构建都开始工作。
只是 运行 XE8 作为管理员为我修复了它。
我在 Windows 10 上安装 RAD Studio XE8 时也遇到了这个问题。当安装在 Windows 7 (x86) 上时,RAD Studio XE8 工作正常。
升级到 Windows 10 (x86) 后,我 运行 进入可怕的未知堆 LME288 错误。起初它没有出现在 Windows 10 上,但如果我安装了一些东西,它就会弹出。如果我把电脑恢复到Windows7,它就会消失。
在网上稍作研究后,我找到了解决方案。 ilink32.exe 存在内存问题,您需要在计算机启动时启用 3GB 内存 space。如果此错误再次出现,我现在要做的是:
- 运行 作为管理员的命令提示符。
- 类型(不带引号)"bcdedit /set IncreaseUserVa 3072"
- 重启电脑。
完成后,ilink32 正常工作。
我发现安装更新版本的Acronis True Image (2016) 后,LME288 错误又回来了。但是 运行 这里的 bcdedit 解决方案,它修复了 RAD Studio XE8 链接器!!!
就我而言,尝试这里提到的所有其他选项根本不起作用。
我的 Windows 10 机器的系统设置中,手动设置虚拟内存量似乎是个窍门。它被设置为由操作系统自动管理,但将其更改为手动值(即使最小值小于自动分配的值,并且它是实际使用的值)使链接器再次工作。
在我的例子中,OS 分配了大约 1,600 Mb。我将最小值设置为 1,024,将最大值设置为 3,072,重新启动,现在链接器工作正常。使用的数量是 1,024(即使推荐值是 ~1,900)。
as我运行升级到Windows10(x64)后出现LME288错误。
为 ilink32.exe
更改 数据执行保护设置 时错误消失了:
- 系统属性 -> 高级系统设置 -> 性能 -> 设置 -> 数据执行保护
- 为除我 select ->
ilink32.exe
. 之外的所有程序和服务启用 DEP
2020 年 1 月 15 日,Embarcadero 将 RSP-12869 的状态从 "Needs feedback" 更改为 "Open" 并将其分配给 Internal Dev.
更早的历史:
随着 2017 年 4 月 C++ Builder 10.2 Tokyo 版本的发布,Embarcadero 升级了链接器,声称解决了问题:"The linker is now large address aware and can address up to 4GB on a 64-bit system, twice the previous amount. (Some customers hacked the linker to be LAE [sic] in the past by toggling the bit in the PE header; since the code wasn't written to be LAE-aware this hack prevented incremental linking and sometimes other functionality from functioning correctly.)" 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-01-09 的下方评论中报告了同样的问题。
这是一种解决方法:从 10.2 Tokyo 开始,您可以使用一些新选项来控制 LARGEADDRESSAWARE 和链接器堆大小。 Dieter Woellner reported on 26-Oct-2017 暂时设置 C++-Linker |进阶 | “-GF:LARGEADDRESSAWARE”的高级选项条目消除了这个问题。但是问题又来了,他发现如果将 TDS Heapsize 设置为低于 0x08000000 的值,则可以避免 error/crash 链接……暂时。
=====================================
我是那些将链接器破解为 LAA 的客户之一,从而干扰了增量链接(我不需要)并解决了我的问题。如果您不需要增量链接,请继续阅读。
=====================================
我通过在 ilink32.exe
中设置 /LARGEADDRESSAWARE
标志解决了这个问题。原来的解决方案来自
Hiroyuki Shimada,使用 editbin
,并于 2016 年 1 月 12 日在 http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 编辑 post。他还将其应用于bcc32.exe
;我不需要。
作为一项 public 服务,我在此处 post 编辑了我的补丁 ilink32.exe 版本:
- RAD Studio 10 西雅图:
https://s3.amazonaws.com/public-mfay/ilink32.exe
- RAD Studio 10.1 柏林:https://s3.amazonaws.com/public-mfay/ilink32-10.1.exe
要使用其中任何一个,请在 RAD Studio 二进制文件目录中重命名 ilink32.exe
(例如,C:\Program Files (x86)\Embarcadero\Studio.0\bin
用于 RAD Studio Seattle,或 ....0\bin
用于 Berlin),然后将我的复制到它的位置, 将其重命名为 ilink32.exe
.
[注意:这些 /LAA 链接器解决了很多但不是所有用户的问题; 2016 年 7 月 25 日在 https://quality.embarcadero.com/browse/RSP-13247]
查看@Andrew Legget 的 post
这个问题已经存在很长时间了,并不局限于 XE3、XE5、XE7、XE8...现在在 https://quality.embarcadero.com/browse/RSP-13247 有一个冗长的 discussion/lament 为什么会这样在 RAD Studio 的一个版本中修复,但在更高版本中退出;显然是 /LAA "resulted in failures when linking incrementally with the static RTL"。根据 Dennis Jones 在该线程中的 28/Mar/16 12:14 PM post,/LAA 补丁未解决其他链接器错误 "EXE1825" 或 "out of memory" .
如果您想了解可以修补 ilink32.exe 的三种方式,请阅读下文...
使用 lamarker 工具设置大地址感知标志,可从以下网址下载:http://cc.embarcadero.com/Item/30459(感谢 Doug Hay,https://quality.embarcadero.com/browse/RSP-13247 中的 19/Jul/16 post):
lamarker -M -Filink32.exe
(您可以直接在您的 C:\Program Files (x86)\Embarcadero\Studio.0\bin
(或 ....0\bin
)目录中执行此操作;它将把原来的 ilink32.exe
重命名为 ilink32.exe.old
-- 如果您有权限)
--或--
使用 MS Visual Studio 中的 editbin
,如果您已经安装了此类软件(Microsoft 声称 editbin
必须运行 来自 IDE)。作为准备步骤,复制 bcc32.exe
和 ilink32.exe
以防止 UAC 被阻止(并备份它们)
copy "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\bcc32.exe" .
copy "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\ilink32.exe" .
editbin /LARGEADDRESSAWARE bcc32.exe
editbin /LARGEADDRESSAWARE ilink32.exe
-- 或--
- 使用 masm32 包中的
editbin
设置大地址感知标志:
从 http://www.masm32.com/download.htm 下载,创建 c:\masm32\bin\editbin.exe
。我在 MASM32 安装期间收到了一些警告(涉及序数 201 和 203),但它的 self-test 通过了,我只需要 editbin.exe
.
我通过确保从所有防病毒扫描中排除 Embarcadero 安装文件夹(例如 C:\Program Files (x86)\Embarcadero)来修复此问题。
已修复 XE10 和 Windows10 (x64) 与 Bitdefender IS 2016:
Bitdefender -> 模块 -> 防病毒 -> 排除 -> 排除的进程 -> 添加“...\bin\ilink32.exe” -> 允许
重启 W10 解决了 XE5 上的这个问题
但我正在停用增量构建
解决方法很简单:windows PATH 环境变量超过了 2047 字节的限制。
请看我的描述:
http://blog.bitart.at/lme288/[德语]
编辑:我的 "solution" 只持续了几个月。安装 Microsoft Visual Studio 后又出现问题。
如另一个答案中所述:用
修补 ilink32.exe
lamarker -M -Filink32.exe
似乎是正确的解决方案。
Windows 10(x64),Rad Studio XE Berlin(启用增量 link)。
我通过排除解决了问题
“C:\Program Files (x86)\Embarcadero\bin”来自防病毒 Window Defender 扫描。
使用 BDSSetLang.exe 将 IDE 语言从法语更改为英语
为我解决了 LME288 错误!
似乎使用 10.2.3 提供的链接器,TDS 堆大小可以设置为 0x1FF00000
。在新旧版本中,这个最大值更小(给出 LME200)。如果您需要较大的堆大小,我建议使用 10.2.3 的链接器。我还打开了一个关于这个的错误报告:RSP-27205
对我来说似乎是绝对随机的...我也遇到了“未知堆名称”故障。我尝试了很多上面的解决方案,其中 none 行得通。我尝试了 circlepi314 的 ilink,尝试清理临时文件、多次重启等。
在 Embarcadero 的链接器失败页面上,我发现来自 dll 的调用约定可能会导致问题。我的项目确实包含对 dll 的调用。
我排除了这些调用,编译并再次链接,没有任何问题。
在那之后,我再次包含了这些调用,它也没有任何问题地链接了。尽管我什至在两者之间清理了项目。我什至不能再复制它了。
一定有一些残基被链接器使用,现在已经消失了。
所以希望这对将来的人有所帮助。
在我的情况下,它是 Avast Antivirus - 我将其关闭并且链接有效
我 运行 遇到了与 10.4 相同的问题。 ilink32 在安装后的第一次编译时发出一长串警告。我检查了 linker 选项中的大地址感知 (LARGEADDRESSAWARE) 标志,它已经设置。然后我将 TDS 堆大小设置为低于 0x08000000 的值(我使用 0x07FFFFFF)并进行了重建。至此,link彻底失败。然后我将 TDS 堆大小重置为默认值 0 并重建,此时所有 ilink32 警告都被消除并且 link 完全干净。
我怀疑除非明确设置,否则不会从配置中读取 TDS 堆大小值。我怀疑在默认零上输入零是否有效,因为 IDE 可能看不到值的变化,所以我建议设置为零以外的某个值,构建,然后设置回零并重建。
很难相信你们都有一个项目需要增加堆大小...我所有的 LME200 LME288 和其他内存不足错误在重新安装所有附加组件后肯定消失了(Fastreport/Devexpress 等.) 没有调试信息。之后的 TDS 文件大小缩小了 3 倍,链接器和调试器的工作方式与 Embarcadero 使用一个表单应用程序测试的完全一样 - 不再出现疯狂错误。
突然间,我收到 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,该项目已经 运行 一年多了。我试过:
- 增量链接器disabled/enabled,没有区别...
- 手动删除 /debug 中的所有文件,仍然没有变化...
- 完整版本,没有区别...
- 重启电脑,没有变化...
here之前有人问过这个问题,但没有提出真正的解释或解决方案。
我还能做些什么来解决这个问题?
编辑
我试图重建几个多年来一直 运行 正常的其他项目,现在我的所有项目都出现 LME288 错误。
我找到了一个似乎有效的解决方法。
这似乎与损坏的临时文件有关。我在我的系统磁盘上做了 "Disk Cleanup" 之后,我设法让它再次工作。
我删除了列表中的所有文件(选中所有复选框)以及 "Clean up system files"
之后我可以编译 link,甚至无需重新启动。 甚至增量 link 又开始工作了!
我有一个不同的解决方案,希望能帮助遇到这个问题的人。
我尝试了所有方法,none 之前建议的解决方案对我有用。磁盘清理没有帮助。这显然是 C++Builder 中存在多年的错误,即使在 2015 年的 XE8 中也仍未修复。
幸运的是,我有另一台有工作环境的电脑,同样的项目在那里编译。我将输出目录 (Win32/Debug) 中的所有文件(*.exe、*.obj 等)从那台计算机复制到我遇到问题的那台计算机上,然后神奇地直接设置了 C++ Builder;之后的所有构建都开始工作。
只是 运行 XE8 作为管理员为我修复了它。
我在 Windows 10 上安装 RAD Studio XE8 时也遇到了这个问题。当安装在 Windows 7 (x86) 上时,RAD Studio XE8 工作正常。
升级到 Windows 10 (x86) 后,我 运行 进入可怕的未知堆 LME288 错误。起初它没有出现在 Windows 10 上,但如果我安装了一些东西,它就会弹出。如果我把电脑恢复到Windows7,它就会消失。
在网上稍作研究后,我找到了解决方案。 ilink32.exe 存在内存问题,您需要在计算机启动时启用 3GB 内存 space。如果此错误再次出现,我现在要做的是:
- 运行 作为管理员的命令提示符。
- 类型(不带引号)"bcdedit /set IncreaseUserVa 3072"
- 重启电脑。
完成后,ilink32 正常工作。
我发现安装更新版本的Acronis True Image (2016) 后,LME288 错误又回来了。但是 运行 这里的 bcdedit 解决方案,它修复了 RAD Studio XE8 链接器!!!
就我而言,尝试这里提到的所有其他选项根本不起作用。
我的 Windows 10 机器的系统设置中,手动设置虚拟内存量似乎是个窍门。它被设置为由操作系统自动管理,但将其更改为手动值(即使最小值小于自动分配的值,并且它是实际使用的值)使链接器再次工作。
在我的例子中,OS 分配了大约 1,600 Mb。我将最小值设置为 1,024,将最大值设置为 3,072,重新启动,现在链接器工作正常。使用的数量是 1,024(即使推荐值是 ~1,900)。
as
为 ilink32.exe
更改 数据执行保护设置 时错误消失了:
- 系统属性 -> 高级系统设置 -> 性能 -> 设置 -> 数据执行保护
- 为除我 select ->
ilink32.exe
. 之外的所有程序和服务启用 DEP
2020 年 1 月 15 日,Embarcadero 将 RSP-12869 的状态从 "Needs feedback" 更改为 "Open" 并将其分配给 Internal Dev.
更早的历史: 随着 2017 年 4 月 C++ Builder 10.2 Tokyo 版本的发布,Embarcadero 升级了链接器,声称解决了问题:"The linker is now large address aware and can address up to 4GB on a 64-bit system, twice the previous amount. (Some customers hacked the linker to be LAE [sic] in the past by toggling the bit in the PE header; since the code wasn't written to be LAE-aware this hack prevented incremental linking and sometimes other functionality from functioning correctly.)" 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-01-09 的下方评论中报告了同样的问题。
这是一种解决方法:从 10.2 Tokyo 开始,您可以使用一些新选项来控制 LARGEADDRESSAWARE 和链接器堆大小。 Dieter Woellner reported on 26-Oct-2017 暂时设置 C++-Linker |进阶 | “-GF:LARGEADDRESSAWARE”的高级选项条目消除了这个问题。但是问题又来了,他发现如果将 TDS Heapsize 设置为低于 0x08000000 的值,则可以避免 error/crash 链接……暂时。
=====================================
我是那些将链接器破解为 LAA 的客户之一,从而干扰了增量链接(我不需要)并解决了我的问题。如果您不需要增量链接,请继续阅读。
=====================================
我通过在 ilink32.exe
中设置 /LARGEADDRESSAWARE
标志解决了这个问题。原来的解决方案来自
Hiroyuki Shimada,使用 editbin
,并于 2016 年 1 月 12 日在 http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 编辑 post。他还将其应用于bcc32.exe
;我不需要。
作为一项 public 服务,我在此处 post 编辑了我的补丁 ilink32.exe 版本:
- RAD Studio 10 西雅图: https://s3.amazonaws.com/public-mfay/ilink32.exe
- RAD Studio 10.1 柏林:https://s3.amazonaws.com/public-mfay/ilink32-10.1.exe
要使用其中任何一个,请在 RAD Studio 二进制文件目录中重命名 ilink32.exe
(例如,C:\Program Files (x86)\Embarcadero\Studio.0\bin
用于 RAD Studio Seattle,或 ....0\bin
用于 Berlin),然后将我的复制到它的位置, 将其重命名为 ilink32.exe
.
[注意:这些 /LAA 链接器解决了很多但不是所有用户的问题; 2016 年 7 月 25 日在 https://quality.embarcadero.com/browse/RSP-13247]
查看@Andrew Legget 的 post这个问题已经存在很长时间了,并不局限于 XE3、XE5、XE7、XE8...现在在 https://quality.embarcadero.com/browse/RSP-13247 有一个冗长的 discussion/lament 为什么会这样在 RAD Studio 的一个版本中修复,但在更高版本中退出;显然是 /LAA "resulted in failures when linking incrementally with the static RTL"。根据 Dennis Jones 在该线程中的 28/Mar/16 12:14 PM post,/LAA 补丁未解决其他链接器错误 "EXE1825" 或 "out of memory" .
如果您想了解可以修补 ilink32.exe 的三种方式,请阅读下文...
使用 lamarker 工具设置大地址感知标志,可从以下网址下载:http://cc.embarcadero.com/Item/30459(感谢 Doug Hay,https://quality.embarcadero.com/browse/RSP-13247 中的 19/Jul/16 post):
lamarker -M -Filink32.exe
(您可以直接在您的 C:\Program Files (x86)\Embarcadero\Studio.0\bin
(或 ....0\bin
)目录中执行此操作;它将把原来的 ilink32.exe
重命名为 ilink32.exe.old
-- 如果您有权限)
--或--
使用 MS Visual Studio 中的
editbin
,如果您已经安装了此类软件(Microsoft 声称editbin
必须运行 来自 IDE)。作为准备步骤,复制bcc32.exe
和ilink32.exe
以防止 UAC 被阻止(并备份它们)copy "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\bcc32.exe" .
copy "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\ilink32.exe" .
editbin /LARGEADDRESSAWARE bcc32.exe
editbin /LARGEADDRESSAWARE ilink32.exe
-- 或--
- 使用 masm32 包中的
editbin
设置大地址感知标志:
从 http://www.masm32.com/download.htm 下载,创建 c:\masm32\bin\editbin.exe
。我在 MASM32 安装期间收到了一些警告(涉及序数 201 和 203),但它的 self-test 通过了,我只需要 editbin.exe
.
我通过确保从所有防病毒扫描中排除 Embarcadero 安装文件夹(例如 C:\Program Files (x86)\Embarcadero)来修复此问题。
已修复 XE10 和 Windows10 (x64) 与 Bitdefender IS 2016:
Bitdefender -> 模块 -> 防病毒 -> 排除 -> 排除的进程 -> 添加“...\bin\ilink32.exe” -> 允许
重启 W10 解决了 XE5 上的这个问题 但我正在停用增量构建
解决方法很简单:windows PATH 环境变量超过了 2047 字节的限制。
请看我的描述: http://blog.bitart.at/lme288/[德语]
编辑:我的 "solution" 只持续了几个月。安装 Microsoft Visual Studio 后又出现问题。
如另一个答案中所述:用
修补 ilink32.exelamarker -M -Filink32.exe
似乎是正确的解决方案。
Windows 10(x64),Rad Studio XE Berlin(启用增量 link)。
我通过排除解决了问题 “C:\Program Files (x86)\Embarcadero\bin”来自防病毒 Window Defender 扫描。
使用 BDSSetLang.exe 将 IDE 语言从法语更改为英语 为我解决了 LME288 错误!
似乎使用 10.2.3 提供的链接器,TDS 堆大小可以设置为 0x1FF00000
。在新旧版本中,这个最大值更小(给出 LME200)。如果您需要较大的堆大小,我建议使用 10.2.3 的链接器。我还打开了一个关于这个的错误报告:RSP-27205
对我来说似乎是绝对随机的...我也遇到了“未知堆名称”故障。我尝试了很多上面的解决方案,其中 none 行得通。我尝试了 circlepi314 的 ilink,尝试清理临时文件、多次重启等。 在 Embarcadero 的链接器失败页面上,我发现来自 dll 的调用约定可能会导致问题。我的项目确实包含对 dll 的调用。 我排除了这些调用,编译并再次链接,没有任何问题。 在那之后,我再次包含了这些调用,它也没有任何问题地链接了。尽管我什至在两者之间清理了项目。我什至不能再复制它了。 一定有一些残基被链接器使用,现在已经消失了。 所以希望这对将来的人有所帮助。
在我的情况下,它是 Avast Antivirus - 我将其关闭并且链接有效
我 运行 遇到了与 10.4 相同的问题。 ilink32 在安装后的第一次编译时发出一长串警告。我检查了 linker 选项中的大地址感知 (LARGEADDRESSAWARE) 标志,它已经设置。然后我将 TDS 堆大小设置为低于 0x08000000 的值(我使用 0x07FFFFFF)并进行了重建。至此,link彻底失败。然后我将 TDS 堆大小重置为默认值 0 并重建,此时所有 ilink32 警告都被消除并且 link 完全干净。
我怀疑除非明确设置,否则不会从配置中读取 TDS 堆大小值。我怀疑在默认零上输入零是否有效,因为 IDE 可能看不到值的变化,所以我建议设置为零以外的某个值,构建,然后设置回零并重建。
很难相信你们都有一个项目需要增加堆大小...我所有的 LME200 LME288 和其他内存不足错误在重新安装所有附加组件后肯定消失了(Fastreport/Devexpress 等.) 没有调试信息。之后的 TDS 文件大小缩小了 3 倍,链接器和调试器的工作方式与 Embarcadero 使用一个表单应用程序测试的完全一样 - 不再出现疯狂错误。