Qt插件标识符问题(或预处理程序问题)

时间:2019-04-29 21:35:34

标签: c++ qt c-preprocessor

我有一个Qt插件,对于iOS构建是静态的,而对于其他系统则是动态的。这样IID就需要与众不同。

#include <QtQuick>
#include <QtGlobal>

class myPlugin : public QQmlExtensionPlugin
{
    Q_OBJECT
#if defined(Q_OS_IOS)
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
#else
    Q_PLUGIN_METADATA(IID "myPlugin")
#endif

问题在于,在iOS上,它似乎没有使用正确的IID。我会收到找不到myPlugin的运行时错误。

  1. 我可以确认Q_OS_IOS已定义-当我使用#pragma消息查看正在使用哪个分支时,我得到了正确的分支。
  2. 当我注释掉条件并仅离开Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")时,应用程序运行正常。
  3. 当我仅注释掉Q_PLUGIN_METADATA(IID "myPlugin")时,代码将无法编译
Undefined symbols for architecture arm64:
 "qt_static_plugin_myPlugin()", referenced from:
...

我很困惑-看起来编译器正在使用而不是同时使用正确的条件分支:)。

0 个答案:

没有答案