Qt moc.exe - 32位和64位版本之间的差异?

时间:2017-03-08 16:07:53

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

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

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

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

提前致谢 萨米尔

1 个答案:

答案 0 :(得分:1)

  

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

是。 不支持这样的混合和匹配。它可能有用,但它可能会破坏,因为没有人测试它以确保它的工作原理。 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的项目中使用的构建工具。此外,任何大型项目都应该使用许多其他代码生成器,以提高您的工作效率。避免将代码生成作为策略会适得其反。如:它将花费你更多。