Проблема идентификатора плагина Qt (или проблема препроцессора) - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть плагин 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:
...

Я сбит с толку - похоже, компилятор использует и не использует правильную условную ветвь одновременно:).

...