Код, скомпилированный в 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