【问题标题】:Qt Resource System and MSVC C1060Qt 资源系统和 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 [] = {...}。

标签: c++ qt visual-c++


【解决方案1】:

此外,您可以使用外部二进制资源文件。 创建者:

rcc -binary myresource.qrc -o myresource.rcc

比在应用程序中加载

QResource::registerResource("/path/to/myresource.rcc");

此过程没有使用 VS 编译器,也没有引发错误。

【讨论】:

    【解决方案2】:

    对于仍然面临此问题的任何人,有关于它的错误报告 herehere。简单的解决方案是将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 非常慢)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-04
          • 1970-01-01
          • 2012-06-26
          • 1970-01-01
          • 2018-08-16
          • 1970-01-01
          相关资源
          最近更新 更多