Qt编译错误:“分配134 MB时内存不足”“未找到cc1plus.exe”

8
我正在开发一个需要大量小图像的Windows游戏,它们被放置在资源文件resources.qrc中,总大小达到14 MB。
当我尝试编译时,唯一的错误是:"内存分配134 MB时出现内存不足"和"找不到cc1plus.exe"。
我该如何处理这个问题?

@fritzone 感谢您的回答,我不知道如何在没有qrc的情况下加载我的文件,因为我一直都是用它。您能否给我提供一个链接或一些代码来完成这个操作?非常感谢。 - Francesco Bonizzi
相关(可能是重复的)- UTF-16编码的源文件:*在Linux上运行'gcc'编译C++源文件时出现“cc1plus:out of memory allocating…”错误消息* - Peter Mortensen
4个回答

12

Windows 7SP1 x86,4 GB RAM

Qt 5.7.0

我遇到了同样的问题,当我在Qt的资源中添加大文件时。我得到了以下错误:

cc1plus.exe:-1: error: out of memory allocating 1073745919 bytes

解决方法:

CONFIG += resources_big 添加到 *.pro 文件中。

我在这里找到了解决方法:cc1plus.exe: out of memory | 60MB encrypted resource file


同样适用于Windows 10 / Qt5.11。 - Mohammad Kanan

9
不要将它们放在qrc中,将它们作为单独的资源(或每个图像都有一个新的qrc文件),并在应用程序启动时加载它们。Qt会生成一个名为“qrc_XXXXX.cpp”的文件,在其中以char数组的形式有效地插入二进制数据,其中包括资源文件XXXXX中的所有资源(是的,对于14MB的图像,只有一个数组,即14680064字节(以十六进制(0xXX)字节写入1个文件...它会很大!),很可能编译器会因此崩溃...)。

6

我也曾遇到过这个问题。但在我的情况下,将所有资源放入.exe是必要的。

在出现这个错误后,我购买了额外的内存(项目非常重要),然后我的内存从6 GB变成了12 GB。

但我很惊讶,因为错误并没有消失 :) 经过一些搜索,最终我找到了答案这里。问题是cc1plus.exe可执行内存限制。因此,在Qt的情况下,可以通过以下步骤解决此问题(对于Windows 7、MinGW32 4.9.2,其他情况可能只需要更改路径):

  1. 如果您的操作系统是32位,则在cmd中(作为管理员)输入bcdedit /set IncreaseUserVa 3072
  2. 安装masm32
  3. 打开cmd(也要作为管理员);
  4. 输入cd C:\Qt\Tools\mingw492_32\libexec\gcc\i686-w64-mingw32\4.9.2
  5. 输入C:\masm32\bin\editbin.exe /LARGEADDRESSAWARE cc1plus.exe

就这样。


1
谢谢,我花了很长时间才意识到,在Win32可执行文件上设置largeaddressaware标志需要使用editbin.exe。 - DanC225

1
不要忘记显而易见的事实:信息可能确实属实,你确实没有足够的内存,或是无法为需要内存的进程提供可用内存。我的电脑上有16GB的内存,对于我的小应用程序来说应该足够了。我想:“肯定不可能是这个原因……”,但是我的电脑已经好几周没有重新启动了。只需要重新启动系统就可以解决这个错误。

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