C++ Builder xe5 检测到错误(LME288)

2024-04-03

c++ Builder xe5 [ilink32 Error] 错误:无法执行链接 [ilink32 警告] 警告:检测到错误 (LME288)

当我尝试编译一个测试项目时发生了这种情况 时间:2019-05-17 标签:c++builderxe5windowsxp


我从 Embarcadero 那里得到了一些可能有帮助的信息。

该错误是“内存不足”错误。 “内存不足”的原因 链接器中的错误(以不同形式出现)是链接器 必须在连续的堆中预先分配内存,然后使用它 链接,以前这些堆是无法调整的,我们只能尽力而为 猜测,所以在新的 64 位链接器中(并且也已添加到 32 位 链接器)我们允许人们手动调整这些堆的大小 当他们需要的时候。现在这些堆可能出现问题的原因是 并非所有系统都是相同的,有些人使用不同的软件来映射 DLL 进入链接器的地址空间,如 Windows Hook DLL、防病毒软件 软件所有这些 DLL 在链接器内部分配内存(任何应用程序 实际上)地址空间,因此对堆的大小有影响 链接器可以分配。所以我们添加了手动调整堆的功能, 但我们也分配了相当大的初始堆。

32位链接器有一个新的开关-GH,见下文,这与 ilink64 开关。

开关的语法是:

-GH[堆名称]=[堆的字节数]"

这个选项 -GH 从 XE3 Update 1 开始就存在,但显然没有记录?

要查看哪个堆内存不足,您可以尝试从命令行。

MSBuild /p:Platform=Win32 /v:diag XXXX.cbproj

这提供了附加信息,例如:

链接器堆溢出:代码

链接器堆


信息 0x002d0000 0x0a000000

代码 0x000d0000 0x00100000

数据 0x00030000 0x08000000

BSS 0x08000000 0x08000000

致命:内存不足

上述输出的左侧是正在使用的字节数 右边是为特定命名分配的字节数 堆。

链接器在启动时分配的默认堆大小为:

“系统”,默认大小 0x08000000

“信息”,默认大小 0x0A000000

“代码”,默认大小 0x08000000

"rodata", 默认大小 0x06000000 //只读数据

“数据”,默认大小 0x08000000

“bss”,默认大小0x08000000

“tds”,默认大小 0x0FA00000

当您看到“未知堆”时,这通常是“tds”堆

将 tds 堆调整为 0x0A000000 的示例,您可以执行 -GHtds=0x0A000000

希望此信息可以帮助您和其他人解决 LME288 错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ Builder xe5 检测到错误(LME288) 的相关文章

随机推荐