如何修复"LME288/未知堆名"警告? [英] How to fix "LME288/Unknown heap name" warning?

查看:149
本文介绍了如何修复"LME288/未知堆名"警告?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

突然,我突然发现LME288链接器错误.

Suddenly, out of the blue, I get the LME288 linker error.

[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,该项目已经运行了一年多.我已经尝试过:

I have no AV installed and the project has been running fine for over a year. I have tried:

  • 增量链接器已禁用/启用,没有区别...
  • 手动删除/debug中的所有文件,但仍保持不变...
  • 完整版本,没有区别...
  • 重新启动计算机,没有任何更改...

此处之前已被问过,但没有真正的解释或解决方案呈现.

This has been asked before here but no real explanation or solution was presented.

我还能做什么来解决这个问题?

What else can I do to fix this?

编辑
我试图重建其他几个运行良好的项目,现在我的所有项目都收到LME288错误.

EDIT
I tried to rebuild a couple of other projects that has been running fine for years and now I get the LME288 error on all my projects.

推荐答案

2020年1月15日,Embarcadero更改了

On 15 Jan, 2020, Embarcadero changed the status of RSP-12869 from "Needs feedback" to "Open" and assigned it to Internal Dev.

较旧的历史记录: 随着2017年4月东京10.2版C ++ Builder的发布,Embarcadero升级了链接器,声称可以解决该问题:该链接器现在可以识别大地址,并且在64位系统上可以寻址多达4GB,是以前的两倍.(过去,有些客户通过切换PE标头中的位来将链接器黑客化为LAE [sic];由于未将代码编写为可识别LAE的代码,因此这种黑客行为会阻止增量链接,有时会阻止其他功能正常运行.)"

Older History: With the 10.2 Tokyo release of C++ Builder in April 2017, Embarcadero upgraded the linker, claiming to solve the problem: "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的链接器仍不能解决问题:

However, on May 24, 2017, Ashleigh Quick reported that 10.2 Tokyo's linker still does not resolve the problem: RSP-12869. Similarly, @Ultralisk reports the same problem in a comment below on 2020-01-09.

这是一种解决方法:从10.2 Tokyo开始,您有了一些新的选项来控制LARGEADDRESSAWARE和链接程序堆大小. Dieter Woellner 报告于2017年10月26日,该报告暂时设置了C ++-Linker |进阶| "-GF:LARGEADDRESSAWARE"的高级选项"条目消除了该问题.但是问题又回来了,他发现如果将TDS堆大小设置为小于0x08000000的值,就可以避免链接时出现错误/崩溃.

Here's one workaround: beginning with 10.2 Tokyo, you have some new options to control LARGEADDRESSAWARE and linker heap sizes. Dieter Woellner reported on 26-Oct-2017 that, temporarily, setting C++-Linker | Advanced | Advanced Options entry to "-GF:LARGEADDRESSAWARE" eliminated the problem. But the problem returned, and he discovered that if you set the TDS Heapsize to a value below 0x08000000 you avoid the error/crash on linking...for now.

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

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

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

I am one of those customers who hacked the linker to be LAA, thereby interfering with incremental linking (which I don't need) and solving my problem. If you don't need incremental linking, read on.

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

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

我通过在ilink32.exe中设置/LARGEADDRESSAWARE标志解决了该问题.原始解决方案来自 Shimada Hiroyuki Shimada,使用editbin,并发布在 http://qc.embarcadero .com/wc/qcmain.aspx?d = 134775 (日期:2016年1月12日).他还将其应用于bcc32.exe;我不需要.

I resolved the problem by setting the /LARGEADDRESSAWARE flag in ilink32.exe. The original solution came from Hiroyuki Shimada, using editbin, and posted at http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 on 1/12/2016. He also applied it to bcc32.exe; I didn't need to.

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

As a public service, I have posted my patched ilink32.exe versions here:

  • RAD Studio 10 Seattle: https://s3.amazonaws.com/public-mfay/ilink32.exe
  • RAD Studio 10.1 Berlin: https://s3.amazonaws.com/public-mfay/ilink32-10.1.exe

要使用其中任何一个,请在RAD Studio二进制文件目录中重命名ilink32.exe(例如,对于RAD Studio Seattle,为C:\Program Files (x86)\Embarcadero\Studio\17.0\bin,对于柏林,为...\18.0\bin),然后复制我的位置,将其重命名为ilink32.exe.

To use either, rename your ilink32.exe in your RAD Studio binaries directory (e.g. C:\Program Files (x86)\Embarcadero\Studio\17.0\bin for RAD Studio Seattle, or ...\18.0\bin for Berlin), and copy mine in its place, renaming it to ilink32.exe.

[注意:这些/LAA链接程序为许多(但不是全部)用户解决了问题;请参阅@Andrew Legget在2016年7月25日发布的帖子,网址为 https://quality.embarcadero.com/浏览/RSP-13247 ]

[Note: these /LAA linkers solve the problem for many, but not all users; see @Andrew Legget's post on 7/25/2016 at https://quality.embarcadero.com/browse/RSP-13247]

这个问题已经存在很长时间了,不仅限于XE3,XE5,XE7,XE8 ...

This problem has been around for a long time and is not limited to XE3, XE5, XE7, XE8... There is now a lengthy discussion/lament at https://quality.embarcadero.com/browse/RSP-13247 as to why this was fixed in one version of RAD Studio but backed out in a later version; apparently /LAA "resulted in failures when linking incrementally with the static RTL". According to the 28/Mar/16 12:14 PM post by Dennis Jones in that thread, the /LAA patch does NOT address the other linker errors "EXE1825" or "out of memory".

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

Read below if you want to see three ways in which ilink32.exe can be patched...

  1. 使用 lamarker 工具设置大地址感知标志,可从以下网站下载:

  1. Set Large Address Aware flag with the lamarker tool, downloadable from: http://cc.embarcadero.com/Item/30459 (thanks to Doug Hay, 19/Jul/16 post in https://quality.embarcadero.com/browse/RSP-13247):

lamarker -M -Filink32.exe

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

(You may do this directly in your C:\Program Files (x86)\Embarcadero\Studio\17.0\bin (or ...\18.0\bin) directory; it will rename the original ilink32.exe to ilink32.exe.old -- if you have permission)

-或-

  1. 使用 MS Visual Studio 中的editbin(如果已安装)(Microsoft声称editbin必须在IDE中运行).首先,复制bcc32.exeilink32.exe以防止UAC被阻止(并备份它们)

  1. Use editbin from MS Visual Studio, if you already have such installed (Microsoft claims that editbin must be run from within the IDE). As a preliminary step, copy bcc32.exe and ilink32.exe to prevent UAC's block (and to back them up)

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. 使用 masm32 包中的editbin设置大地址感知标志:
  1. Set the Large Address Aware flag using editbin from the masm32 package:

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

Download from http://www.masm32.com/download.htm, which creates c:\masm32\bin\editbin.exe. I got a few warnings (involving ordinals 201 and 203) during MASM32 installation but its self-test passed, and all I needed was editbin.exe.

这篇关于如何修复"LME288/未知堆名"警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆