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 的客户之一,从而干扰了增量链接(我不需要)并解决了我的问题。如果您不需要增量链接,请继续阅读。
======================================
我通过/LARGEADDRESSAWARE
在ilink32.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 的三种方式,请阅读下文...
使用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.exe
为ilink32.exe.old
--
- 或者 -
editbin
从MS Visual Studio中使用,如果您已经安装了此类(Microsoft 声称editbin
必须从 IDE 中运行)。作为初步步骤,复制bcc32.exe
并ilink32.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
- 或者 -
- 使用masm32包
editbin
中的设置大地址感知标志:
从http://www.masm32.com/download.htm下载,它会创建c:\masm32\bin\editbin.exe
. 在 MASM32 安装过程中,我收到了一些警告(涉及序数 201 和 203),但它的自检通过了,我只需要editbin.exe
.