Статическая компиляция QJson в Qt Application (множественные ошибки объявления) - PullRequest
3 голосов
/ 13 октября 2010

Кто-нибудь успешно компилировал QJson статически в приложение? Я пытаюсь использовать QJson статически в своем приложении Qt (Windows / Mac), то есть я пытаюсь использовать исходные файлы напрямую, а не компилировать DLL и использовать ее. Это возможно? Моя программа выдает много ошибок, когда я пытаюсь это сделать, в основном ошибки «множественного объявления». По-видимому, они связаны со структурой метода, подобной этой:

SerializerRunnable::SerializerRunnable(QObject* parent)
    : QObject(parent),
      QRunnable(),
      d(new Private)
{
  qRegisterMetaType<QVariant>("QVariant");
}
SerializerRunnable::~SerializerRunnable()
{
  delete d;
}

Любые идеи будут оценены.

Спасибо

1 Ответ

2 голосов
/ 20 октября 2010

Код, скомпилированный в DLL, должен экспортировать функции и классы, которые он хочет представить внешнему миру, ссылаясь на него во время выполнения.

В этом конкретном случае происходит волшебствов qjson_export.h:

#ifndef QJSON_EXPORT_H
#define QJSON_EXPORT_H

#include <QtCore/qglobal.h>

#ifndef QJSON_EXPORT
# if defined(QJSON_MAKEDLL)
   /* We are building this library */
#  define QJSON_EXPORT Q_DECL_EXPORT
# else
   /* We are using this library */
#  define QJSON_EXPORT Q_DECL_IMPORT
# endif
#endif

#endif

Если в вашем файле .pro нет DEFINES += QJSON_MAKEDLL, то компилятор предполагает, что вы используете DLL, а не компилируете коди запутывается, когда код, помеченный Q_DECL_EXPORT как «определенный в другом месте», на самом деле, прямо здесь, и тупо предполагает, что его определяют несколько раз.

Надеюсь, это имеет смысл.: P

...