为什么g++/ld会耗尽内存?

6

我正在尝试编译Qt(Windows 7,msys下的mingw32-g ++ 32位),但ld内存不足。有人知道原因吗?或者有解决方法吗?谢谢!

$ g++ -mthreads -shared -Wl,--out-implib,i:/ Programs / Qt / lib / libQtGuid4.a -o ../
../lib/QtGuid4.dll object_script.QtGuid.Debug  -L'i:/Programs/Qt/lib' -L'i:/Pro
grams/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
i:/ programs / mingw / bin / .. / lib / gcc / mingw32 / 4.7.0 / .. / .. / .. / .. / mingw32 / bin / ld.exe:o ut of memory allocating 133614056 bytes collect2.exe:错误:ld返回1个退出状态

你首先有足够的内存吗?130 MB 真的不算很多... - Mysticial
5
听起来编译器正在以32位模式运行,这将在Windows上限制为2GB。您尝试过64位吗? - Mysticial
2
mintw-w64拥有一个64位工具链。 - ephemient
2
如果你有冒险精神,可以尝试使用editbin /largeaddressaware ld.exe 使 ld.exe 具备大地址意识 - editbin 与 Microsoft C/C++ 工具链一起提供,SDK 也许也有。这将为进程提供4GB的可用内存,但是如果程序在处理高位设置的指针时存在错误(这是一个常见问题,这就是为什么图像的头部有一个特殊的比特来启用该功能),那么您可能会遇到其他问题。因此,在必要时请备份 ld.exe 的副本以进行恢复。 - Michael Burr
2
这里有几个建议。 - user827992
显示剩余6条评论
3个回答

5
感谢所有评论者帮助我找到了解决这个问题的方法。我的做法是用支持大地址空间的版本来替换ld。我从这个MinGW构建中的bin文件夹中下载了它。那位分享该分发版链接的人发布在这里。我希望这能帮助其他遇到这个问题的人。

2
如果您安装了当前版本的MinGW 4.6或更高版本,则编译QT应该指定以下标志:
configure -platform win32-g++-4.6
在win32-g++4.6的“mkspecs”中已经定义了-fno-keep-inline-dllexport标志,可以解决您的问题。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接