将QJson静态编译为Qt应用程序(多个声明错误)

时间:2010-10-12 21:34:11

标签: c++ qt compiler-construction static-libraries

是否有人成功将QJson静态编译到应用程序中?我试图在我的Qt应用程序(Windows / Mac)中静态使用QJson,这意味着我正在尝试直接使用源文件而不是编译DLL并使用它。这可能吗?当我尝试这样做时,我的程序产生了很多错误,主要是“多重声明”错误。它们似乎与拥有这样的方法结构相关:

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

任何想法都会受到赞赏。

谢谢,

1 个答案:

答案 0 :(得分:2)

编译成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

如果你的DEFINES += QJSON_MAKEDLL文件中没有.pro,那么编译器会认为你使用一个DLL,而不是编译代码,并在代码时感到困惑事实上,Q_DECL_EXPORT标记为“在其他地方定义”就在那里,并且愚蠢地认为它被多次定义。

我希望这是有道理的。 :P