【问题标题】:Qt moc.exe - difference between 32 and 64-Bit version?Qt moc.exe - 32 位和 64 位版本之间的区别?
【发布时间】:2017-07-29 07:29:04
【问题描述】:

我试图找出 Qt5 的 32 位和 64 位子文件夹中的 moc.exe(Qt 元对象编译器)之间的区别。

如果我让具有 64 位目标架构的应用程序由 32 位或 64 位 moc.exe 版本构建(和处理)会有什么不同吗?

我找不到任何关于此的信息。如果有人有线索或想法有什么区别(除了为相应的架构编译并且当然具有不同的文件大小)或者如果这完全不同(因为它只生成 cpp 文件)我会非常有兴趣知道。

提前致谢 萨米尔

【问题讨论】:

    标签: c++ qt 32bit-64bit moc


    【解决方案1】:

    如果我让具有 64 位目标架构的应用程序由 32 位或 64 位 moc.exe 版本构建(和处理)会有什么不同吗?

    是的。 不支持这种混合和匹配。它可能会起作用,但它可能会中断,因为没有人对其进行测试以确保它起作用。 Qt 有一个在持续集成过程中运行的广泛的测试套件。像这样未经测试的东西是一个很大的暗示,如果你依赖它,你就靠自己了。如果您遇到奇怪的运行时错误,请不要抱怨。不要这样做。

    有什么区别

    无所不能。 Qt 作为与您的合同所保证的是,来自先前二进制兼容 Qt 版本的 moc 输出保留前向二进制兼容性。例如。如果您有 Qt 5.7 的 moc 输出,并且您构建了应用程序的共享二进制文件,然后将 Qt 替换为二进制兼容的 5.8,那么旧的 moc 输出是有效的,并且 Qt 5.8 知道如何安全地使用它。就是这样。

    显然,由于 32 位和 64 位 Qt 版本二进制兼容,你不应该期望 moc 输出也是。如果碰巧是这样,那只是巧合,设计中的任何内容都无法保证。它随时可能损坏。

    您不应该遇到这个问题,因为qmake/qbs/cmake 将为您使用正确的moc。似乎您可能正在尝试使用 moc 预处理源,以便在构建项目时不需要进一步使用 moc。这种策略行不通。您需要学习如何利用构建工具来构建您的项目,并使用它需要的代码生成器。

    moc 不是 Qt 提供的唯一构建工具,您最终可能会在基于 Qt 的项目中使用。此外,任何规模的项目都应该使用许多其他代码生成器,以提高您的工作效率。避免将代码生成作为策略会适得其反。如:它会花费你更多。

    【讨论】:

    • 谢谢库巴。这很有帮助,并按我的预期回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 2011-12-12
    • 1970-01-01
    • 2011-09-13
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多