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编译器堆内存不足)

Qt5 msvc 2010不识别自动(c ++ 11)[重复]

vs2015上编译QT程序的环境搭建

Qt使用MSVC编译器中文乱码解决方法

Qt学习第一天

关于Qt配置编译器的问题