Qt 资源系统和 MSVC C1060
Posted
技术标签:
【中文标题】Qt 资源系统和 MSVC C1060【英文标题】:Qt Resource System and MSVC C1060 【发布时间】:2013-08-21 08:10:59 【问题描述】:我在编译 qrc 文件时遇到了堆空间不足的问题。 qrc文件列表:
<RCC>
<qresource prefix="/">
<file>package.lpgk</file>
</qresource>
</RCC>
所以,如您所见,qrc 文件包含一个文件 (35Mb),我仍然遇到编译器错误 C1060。
在 Windows 任务管理器 (taskmgr.exe) 中,我看到编译器使用了大约 2Gb RAM(此时它是所有可用内存)和交换。
指定像 /Zm2000 这样的编译器选项没有帮助。 我使用的是 MSVC 2010 版本。
【问题讨论】:
我怀疑资源是编译器使用 2GB RAM 的原因。 qrc 文件是使用 rcc 而不是 MSVC 编译的。你在编译什么以及如何编译? rcc 创建一个 .cpp 源文件,可能这个文件已经超出了 MSVC 设置的文件大小限制,检查你是否可以自己编译那个文件。如果您的资源文件名为 xxxx.qrc,请在 Generated Files 下查找名为 qrc_xxxx.cpp 的文件以获取 rcc 生成的输出 是的,文件重 185 mb。它包含带有十六进制数据的 statice const unsigned char qt_resource_data [] = ...。 【参考方案1】:此外,您可以使用外部二进制资源文件。 创建者:
rcc -binary myresource.qrc -o myresource.rcc
比在应用程序中加载
QResource::registerResource("/path/to/myresource.rcc");
此过程没有使用 VS 编译器,也没有引发错误。
【讨论】:
【参考方案2】:对于仍然面临此问题的任何人,有关于它的错误报告 here 和 here。简单的解决方案是将resources_big
附加到您的项目CONFIG
(即.pro 文件),如下所示:
CONFIG += c++17 resources_big
【讨论】:
【参考方案3】:在迁移到 Visual Studio 2013 后,我们遇到了同样的问题。在 VS 2010 上,对于 32 位和 64 位 Windows,都没有问题。在 VS 2013 上,我们能够通过禁用问题模块的多处理器编译来修复 64 位构建,但这并没有修复 32 位构建。在我们的案例中,升级到最新版本的建议实际上是导致问题的原因,所以我不一定期望它能够解决问题,也不一定总是可以做到。
我们生成的 .cpp 只有 45 MB,因此它比原始海报的示例要小得多。此时,我的方法可能是将 .qrc 文件拆分为几个较小的文件。我们正在嵌入许多字体文件,所以我可以这样做。如果问题是由单个大型资源(例如视频)引起的,那么拆分它是行不通的。我知道这不是一个确定的答案,但希望其他信息将有助于找到更好的解决方案。
【讨论】:
【参考方案4】:解决方法:将 MSVC 编译器更新到最新版本 (11.00.50727.1) aka 2012 对于编译该文件 (185Mb) 编译器使用 11-12 Gb 内存(在我的机器上使用 4Gb RAM 非常慢)
【讨论】:
以上是关于Qt 资源系统和 MSVC C1060的主要内容,如果未能解决你的问题,请参考以下文章
在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)