C++ Builder XE5错误检测(LME288)

7

c++ Builder xe5 [ilink32 错误] 错误: 无法执行链接 [ilink32 警告] 警告: 发现错误 (LME288)

这是我在Windows XP上尝试编译c++ builder xe5测试项目时发生的错误。


1
这是完整的错误日志吗?你的测试程序是什么样子的? - Some programmer dude
这里有一个链接(http://www.codenewsfast.com/cnf/article/0/permalink.art-ng1878q551),但我不确定它是否只是一个误导... - M.M
但它在Windows 7上运行良好...所以我认为可能是Win XP与C++ Builder XE%不兼容。 - Alaa Elsakka
1
相关(解决方法):https://dev59.com/ll4b5IYBdhLWcg3wlilP - M.M
已将此链接到另一个线程,因为显然是相同的问题,而且另一个线程目前有更好的答案。 - M.M
显示剩余4条评论
10个回答

4

我从Embarcadero获得了一些信息,它可能会有所帮助。

错误是“内存不足”错误。在链接器中,“内存不足”错误(以不同方式出现)的原因是,链接器必须预先分配连续堆中的内存,然后在链接时使用这些内存。过去,这些堆无法调整,我们必须进行最佳猜测,因此在新的64位链接器(也已添加到32位链接器中),我们允许人们在需要时手动调整这些堆的大小。现在,这些堆可能成为问题的原因是,并非所有系统都相同,有些人使用将DLL映射到链接器的地址空间中的不同软件,例如Windows Hook DLL、防病毒软件,所有这些DLL都在链接器(任何应用程序)的地址空间内分配内存,从而对链接器可以分配的堆的大小产生影响。因此,我们添加了手动调整堆的功能,但我们还将初始堆分配得很大。
32位链接器有一个新开关-GH,请参见下面的说明,这类似于ilink64开关。
开关的语法是:
-GH[堆名称]=[堆的字节数]"
该选项-GH从XE3更新1开始存在,但显然没有记录?
要查看哪个堆内存不足,您可以尝试从命令行执行以下命令。
MSBuild /p:Platform=Win32 /v:diag XXXX.cbproj
这提供了其他信息,例如:
在链接器堆上溢出:代码
链接器堆
信息0x002d0000 0x0a000000
代码0x000d0000 0x00100000
数据0x00030000 0x08000000
bss 0x08000000 0x08000000
致命错误:内存不足
上面输出的左侧是当前使用的字节数,右侧是为特定命名堆分配的字节数。
链接器在启动时分配的默认堆大小为:
“system”,默认大小0x08000000
“info”,默认大小0x0A000000
“code”,默认大小0x08000000
“rodata”,默认大小0x06000000 //只读数据
“data”,默认大小0x08000000
“bss”,默认大小0x08000000
“tds”,默认大小0x0FA00000
当您看到“未知堆”时,这通常是“tds”堆
例如,要将tds堆调整为0x0A000000,您需要执行-GHtds=0x0A000000
希望这些信息能够帮助您和其他人解决LME288错误。

2

我明白了。

我在Windows 7x64上使用Seattle 10时遇到了同样的问题。 我尝试了所有可以在SO,EDN和其他地方找到的方法。 最后,我不得不使用我的Embarcadero支持票据,因为我再也无法链接任何东西了。 经过Embarcadero的一位高级软件工程师艰苦卓绝的努力,我们最终发现了这个解决方法:

首先,右键单击ilink32.exe,选择属性,然后转到兼容性选项卡,并选中“以兼容模式运行此程序”复选框,选择Windows XP SP3。 在我的系统上(64位Win7,运行Seattle 10),ilink32.exe文件位于“C:\ Program Files(x86)\ Embarcadero \ Studio \ 17.0 \ bin。”

其次,通过右键单击Builder启动图标并选择“以管理员身份运行”来强制进行管理权限(即使您已经是管理员)。

现在,打开您的项目并随心所欲地链接吧! (结果可能会有所不同。)


1

我刚在Windows 10上遇到了XE4的问题。Fvel引导我找到了正确的方向。问题是文件使用BDSLauncher.exe而不是bds.exe打开导致的。我将.groupproj的默认程序设置为bds.exe,问题就解决了。


1
我在这里遇到了相同的问题C++ Builder XE7 LME288 Error
我的解决方案很简单,清理所有临时文件。看起来这个错误与损坏的临时文件有关。

1
我在寻找同样的问题时发现了这个页面,对我来说解决方案很简单: 不要双击项目打开它(例如双击xxxx.cbproj),启动ide然后打开项目
解释?不知道,但现在链接正确了。

0

我在RAD Studio XE7 / Windows 10上遇到了相同的链接器问题LME288。 使用CCleaner清理临时文件解决了这个问题。

编辑:问题不断出现,但再次运行清理可以解决它。


0

对我来说,问题出现在我在XE7中打开了自动增量构建号。我之前的项目已经运行了几个月没有问题。该项目是由早期版本的Builder创建的。首先出现的问题是编译器找不到windows.h文件,rc编译器也是如此。 Builder更新了路径以无效版本(可能是早期的Builder)的形式。添加路径后,出现了LME288错误。 关闭自动增量构建号并删除所有临时文件后,似乎又可以正常工作了。


0

如果您使用的是Bitdefender,请禁用embarcadero bin文件夹中ilink32.exe的反病毒保护软件。


这不是关于防病毒软件的问题...那台机器上没有安装任何防病毒软件。 - Alaa Elsakka

0

对我来说,在Windows 10中,问题是因为没有分配足够的虚拟内存。

解决问题的步骤:

  • 转到“系统”>“高级系统设置”>“高级”。
  • 在“性能”下,单击“设置”>“高级”
  • 在虚拟内存下单击“更改”
  • 确保当前分配的内存等于或大于推荐的内存。如果不是,请选择“自定义大小”,将初始大小设置为推荐大小,最大大小设置为较大的值。

另请参阅C++ Builder XE7 LME288 Error


0
这里提供的解决方案对我没有用。 我的解决方案是将Windows交换文件的大小设置为固定值(例如,最小值:1000 MB,最大值:10000)。重启后,我勾选了“系统管理大小”单选按钮并再次重启。 现在我可以编译和链接而不会出现任何链接器错误。但是LME错误在几天后再次出现。然后我必须执行相同的交换文件步骤来解决问题。

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