【问题标题】:ilink64 Error: Fatal: Malloc of 65536 bytes failedilink64 错误:致命:65536 字节的 Malloc 失败
【发布时间】:2020-09-12 17:15:47
【问题描述】:

我正在 Embarcadero RAD Studio 10.4 上转移 C++ Builder 6 的项目,并在 x64 上使用 x86 更改平台。我的项目包括五个 *.dll 和两个 *.exe 文件。 我在x64平台上成功传输了四个*.dll,但是第五个*.dll报错。当 *.dll - 文件生成时,我收到有关错误的消息:“内存不足”。我访问了网址:

http://docwiki.embarcadero.com/RADStudio/Sydney/en/Handling_Out_of_Memory_Errors

发现,在我发生的溢出三个堆中:

  • 代码堆大小
  • Dwarf str 堆大小
  • 信息堆大小

我一点一点地扩大了所有堆的大小。但是,很快我就达到了限制:“[ilink64 Error] Fatal: Malloc of 65536 bytes failed in ........\bins\Win64\Debug\my_dll.ildw_str, line 6” 关于这个信号 Dwarf str Heap Size。 我访问了网址:

https://stackoverflow.com/a/37537734/9494441

并提出了所有提示。

我试过了:

  • 使用 lamarker 工具设置大地址感知标志
  • 在 10.2.3 版本上将 ilink32.exe 和 ilink64.exe 程序 RAD Studio 替换为 10.4 版本
  • 禁用/启用增量链接器
  • 手动删除 /debug 中的所有文件
  • 全部重建
  • 将文件添加到防病毒排除项 ilink32.exe 和 ilink64.exe

我没有任何帮助。如何解决这个问题?谢谢!

【问题讨论】:

    标签: dll linker 64-bit c++builder rad-studio


    【解决方案1】:

    这只会在调试中发生,对吧?

    您有 4 个选项:

    1. 减少您分配的部分的内存,超过您的项目需要。不要分配比其他部分更多的内存。
    2. 减少模块暴露给的所有符号。有人告诉我,链接器没有检测到重复项,并且一次又一次地包含相同的符号,这使事情变得更糟。如果项目很旧并且包含政策很差,您可能需要在那里进行一些工作
    3. 编译所有版本并仅在您要调试的模块上启用调试信息。
    4. 尝试使用 C++ win64 还不是 C++17 的 10.3.1。在 10.3.2 中,Win64 升级到 C++17,使得链接器问题更容易发生。

    【讨论】:

    • 第 3 段)-> 你说的是为单独的 cpp 模块或 dll 文件启用调试符号?
    • 你可以同时做这两个......这取决于你与链接器限制的接近程度。我从未走那条路,但有人向我推荐了这条路。
    • 我尝试了所有,但没有任何工作...因此我禁用了调试信息(temped)。
    • 是否都在发布模式下编译?
    • 如果您有有效订阅并且有资格获得 3 支持请求。请联系您的销售代表以获取有关如何申请支持票证的信息。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2011-11-28
    • 2023-03-28
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2014-04-29
    相关资源
    最近更新 更多