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 错误。

4

17 回答 17

23

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

更早的历史:随着 2017 年 4 月 C++ Builder 的 10.2 Tokyo 版本,Embarcadero 升级了链接器,声称解决了这个问题:“链接器现在可以识别大地址,并且可以在 64 位系统上寻址高达 4GB,是之前的两倍(过去,一些客户通过切换 PE 标头中的位将链接器破解为 LAE [原文如此];由于代码未编写为可感知 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 | 高级 | “-GF:LARGEADDRESSAWARE”的高级选项条目消除了这个问题。但是问题又回来了,他发现如果您将 TDS Heapsize 设置为低于 0x08000000 的值,您就可以避免链接时出现错误/崩溃......暂时。

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

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

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

我通过/LARGEADDRESSAWAREilink32.exe. 最初的解决方案来自 Hiroyuki Shimada,使用editbin,并于 2016 年 1 月 12 日发布在http://qc.embarcadero.com/wc/qcmain.aspx?d=134775。他还把它应用到bcc32.exe; 我不需要。

作为一项公共服务,我在此处发布了我的修补 ilink32.exe 版本:

要使用其中任何一个,请ilink32.exe在您的 RAD Studio 二进制目录中重命名您的文件(例如C:\Program Files (x86)\Embarcadero\Studio\17.0\bin,RAD Studio 西雅图或...\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 在该线程中 28/Mar/16 下午 12:14 的帖子,/LAA 补丁没有解决其他链接器错误“EXE1825”或“内存不足”。

如果您想了解可以修补 ilink32.exe 的三种方式,请阅读下文...


  1. 使用lamarker工具设置大地址感知标志,可从以下网址下载: http ://cc.embarcadero.com/Item/30459 (感谢 Doug Hay,16 年 7 月 19 日发布在https://quality.embarcadero.com/browse /RSP-13247):

    lamarker -M -Filink32.exe

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

- 或者 -

  1. editbinMS Visual Studio中使用,如果您已经安装了此类(Microsoft 声称editbin必须从 IDE 中运行)。作为初步步骤,复制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

- 或者 -

  1. 使用masm32editbin中的设置大地址感知标志:

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

于 2016-01-15T20:12:03.397 回答
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 链接器!!!

于 2015-10-01T12:34:22.520 回答
4

我找到了一个似乎可行的解决方法。

它似乎与损坏的临时文件有关。在我对系统磁盘进行“磁盘清理”后,我设法让它再次工作。

我删除了列表中的所有文件(选中了所有复选框)以及“清理系统文件”

之后我可以编译和链接,即使没有重新启动。甚至增量链接又开始起作用了!

于 2015-03-08T23:23:50.660 回答
4

只需以管理员身份运行 XE8 即可为我修复它。

于 2015-08-21T21:34:41.667 回答
4

作为Drewski,我在升级到 Windows 10 (x64) 后遇到了 LME288 错误。

更改数据执行保护设置的错误消失了ilink32.exe

  • 系统属性 -> 高级系统设置 -> 性能 -> 设置 -> 数据执行保护
  • 为除我选择的所有程序和服务打开 DEP -> ilink32.exe
于 2015-11-18T15:05:55.140 回答
2

就我而言,尝试此处提到的所有其他选项根本不起作用。

诀窍似乎是在我的 Windows 10 机器的系统设置中手动设置虚拟内存量。它被设置为由操作系统自动管理,但是将其更改为手动值(即使最小值小于自动分配的值,并且它是实际使用的值)使链接器再次工作。

在我的情况下,操作系统分配了大约 1,600 Mb。我将最小值设置为 1,024,最大值设置为 3,072,重新启动,现在链接器工作正常。使用的数量是 1,024(即使推荐值是 ~1,900)。

于 2015-10-15T18:27:27.473 回答
1

为 XE10 和 Windows 10 (x64) 修复了 Bitdefender IS 2016:

Bitdefender -> 模块 -> 防病毒 -> 排除 -> 排除的进程 -> 添加“...\bin\ilink32.exe” -> 允许

于 2016-04-12T08:44:47.850 回答
1

我有一个不同的解决方案,希望能帮助那些为此苦苦挣扎的人。

我尝试了所有方法,但之前建议的解决方案都不适合我。磁盘清理没有帮助。这显然是 C++Builder 中存在多年的 bug,即使在 2015 年的 XE8 中也仍未修复。

幸运的是,我有另一台具有工作环境的计算机,在其中编译了相同的项目。我将所有文件(*.exe、*.obj 等)从该计算机的输出目录(Win32/Debug)复制到我遇到问题的那个,这神奇地设置了 C++ Builder;之后的所有构建都开始工作。

于 2015-08-01T04:37:16.783 回答
1

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

于 2016-05-30T16:15:50.087 回答
0

我在 10.4 中遇到了同样的问题。ilink32 在安装后的第一次编译时发出一长串警告。我检查了链接器选项中的大地址感知 (LARGEADDRESSAWARE) 标志,它已经设置好了。然后我将 TDS Heapsize 设置为低于 0x08000000 的值(我使用了 0x07FFFFFF)并进行了重建。至此,链接彻底失效。然后我将 TDS Heapsize 重置为默认值 0 并重建,此时所有 ilink32 警告都被消除并且链接完全干净。

我怀疑除非明确设置,否则不会从配置中读取 TDS Heapsize 值。我怀疑在默认零上键入零会起作用,因为 IDE 可能看不到值的变化,所以我建议设置为零以外的某个值,构建,然后设置回零并重新构建。

于 2021-08-11T11:32:40.863 回答
0

使用 BDSSetLang.exe 将 IDE 语言从法语更改为英语为我解决了 LME288 错误!

于 2017-11-27T00:10:06.113 回答
0

Windows 10(x64),Rad Studio XE Berlin(启用增量链接)。

我通过从防病毒 Window Defender 扫描中排除“ C:\Program Files (x86)\Embarcadero\bin ”来解决问题。

于 2016-08-01T13:07:26.433 回答
0

我通过确保从所有防病毒扫描中排除 Embarcadero 安装文件夹(例如 C:\Program Files (x86)\Embarcadero)来解决此问题。

于 2016-03-22T18:16:28.020 回答
0

解决方法很简单:windows PATH 环境变量超过了 2047 字节的限制。

请在此处查看我的描述:http: //blog.bitart.at/lme288/ [德语]

编辑:我的“解决方案”只持续了几个月。安装 Microsoft Visual Studio 后,问题又回来了。

正如另一个答案中提到的: Patching ilink32.exe with

lamarker -M -Filink32.exe

似乎是正确的解决方案。

于 2016-07-20T13:31:30.160 回答
0

就我而言,它是 Avast Antivirus - 我将其关闭并且链接有效

于 2021-08-09T06:45:53.813 回答
0

对我来说似乎是绝对随机的......我也遇到了“未知的堆名称”失败。我尝试了很多上面的解决方案,但都没有奏效。我尝试了 circlepi314 的 ilink,尝试清理临时文件、多次重启等。在 Embarcadero 的链接器故障页面上,我发现来自 dll 的调用约定可能会导致问题。我的项目确实包含对 dll 的调用。我排除了这些调用,编译并再次链接,没有任何问题。在那之后,我再次包含了这些调用,并且它也没有任何问题地链接了。尽管我什至在两者之间清理了项目。我什至无法再复制它了。一定有一些残基被链接器使用并且现在已经消失了。因此,希望这可能对将来的某些人有所帮助。

于 2021-05-12T05:23:24.467 回答
0

似乎使用 10.2.3 提供的链接器,TDS 堆大小可以设置为0x1FF00000. 在较旧和较新的版本中,此最大值较小(提供 LME200)。如果您需要较大的堆大小,我建议使用 10.2.3 中的链接器。我还打开了一个关于此的错误报告:RSP-27205

于 2020-01-27T09:56:26.780 回答