【问题标题】:"Unable to perform link" error when compiling in RAD Studio XE8在 RAD Studio XE8 中编译时出现“无法执行链接”错误
【发布时间】:2016-04-09 12:32:26
【问题描述】:

即使我以管理员身份运行 IDE,编译器也会给我一个错误(如图所示)。谁能帮忙解决这个问题?

【问题讨论】:

标签: c++builder c++builder-xe


【解决方案1】:

您的链接器正在尝试分配 128 MB 的内存。 Embarcadero 的以下信息最近发布在 Embarcadero 论坛上:

Error detected (LME288) in Seattle 10 update 1

错误是“内存不足”,错误。 “内存不足”的原因 链接器中的错误(以不同的形式出现)是 链接器 必须在连续堆中预先分配内存,然后将其用作它 链接,过去这些堆无法调整,我们必须做到最好 猜测,所以在新的 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 堆从 0x0FA00000 调整为 0x0A000000 的示例 -GHtds=0x0A000000

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

您可以在项目选项中为链接器指定其他标志,例如 -GH

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多