【问题标题】:Why is g++/ld running out of memory?为什么 g++/ld 内存不足?
【发布时间】:2012-08-12 08:22:46
【问题描述】:

我正在尝试编译 Qt(Windows 7,msys 下的 mingw32-g++ 32 位)并且 ld 内存不足。有谁知道为什么?或者也许是一种解决方法?谢谢!

$ g++ -mthreads -shared -Wl,--out-imlib,i:/Programs/Qt/lib/libQtGuid4.a -o ../ ../lib/QtGuid4.dll object_script.QtGuid.Debug -L'i:/Programs/Qt/lib' -L'i:/Pro 克/Qt/lib' -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 tmp/obj/debug_shared/QtGuid_resource_res.o -lmsimg32 -lshell32 -lQtCored4 -lz 我:/programs/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/ld.exe:o ut 内存分配 133614056 字节 collect2.exe:错误:ld 返回 1 退出状态

【问题讨论】:

  • 你有足够的内存吗? 130 MB 并不是很多...
  • 听起来编译器在 32 位模式下运行。这将在 Windows 上限制为 2GB。你试过 64 位吗?
  • mingw-w64 有一个 64 位工具链。
  • 如果你喜欢冒险,你可以尝试使用editbin /largeaddressaware ld.exeld.exe 感知大地址——editbin 带有Microsoft C/C++ 工具链,也许它也在SDK 中。这将为进程提供 4GB 可用空间,但如果程序在处理设置了高位的指针时存在错误(这是一个常见问题,这就是为什么图像标题中有一个特殊位来启用该功能),您可能会遇到其他问题。因此,请制作ld.exe 的备份副本,以便在必要时恢复。

标签: c++ qt g++ mingw ld


【解决方案1】:

感谢所有帮助我找到解决此问题的方法的评论者。我所做的是用大地址感知版本替换ld。我从 bin 文件夹内的thisMinGW build 下载了它。链接该分布的人的帖子是here。我希望这对遇到此问题的其他人有所帮助。

【讨论】:

    【解决方案2】:

    如果你安装的是当前版本的MinGW 4.6或更高版本,那么编译QT应该指定flag:

    配置-平台 win32-g++-4.6

    在 win32-g++4.6 的“mkspecs”中已经定义了标志 -fno-keep-inline-dllexport 可以解决您的问题。

    【讨论】:

      【解决方案3】:

      我尝试从其他地方下载 ld.exe,但它不适合我的工具包 (TDM-GCC)。某些插件无法加载。希望制作 ld.exe LAA 并不难。我在十六进制编辑器中打开了 ld.exe,并在偏移量 0x96“0f 03”到“2f 03”处进行了修补。这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 2015-10-15
        相关资源
        最近更新 更多