У меня серьезная проблема с моей DLL в Qt.Когда я компилирую свои последние добавления (assertInt () и randomInt ()), я получаю следующую ошибку компиляции
error: определение функции 'randomInteger (const T &, const T &)' помечено как dllimport
Очевидно, я могу принудительно скомпилировать программу, заменив JECLIBRARYSHARED_EXPORT на Q_DECL_EXPORT, но тогда мне придется изменить его обратно на импорт при использовании библиотеки.Это было бы больно.
Кто-нибудь знает, почему эти две конкретные подпрограммы помечаются как DLLIMPORT вместо экспорта?Остальная часть библиотеки экспортируется как следует.Я определил JECLIBRARYSHARED в моем файле .pro.
Так QtCreator сгенерировал код экспорта DLL при создании проекта DLL.
JecLibary_global.h
#ifndef JECLIBRARY_GLOBAL_H
#define JECLIBRARY_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(JECLIBRARY_LIBRARY)
# define JECLIBRARYSHARED_EXPORT Q_DECL_EXPORT
#else
# define JECLIBRARYSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // JECLIBRARY_GLOBAL_H
JecMath.h
#ifndef JECMATH_H
#define JECMATH_H
#include <QList>
#include <QTime>
#include <JecLibrary_global.h>
#include <JecUtils.h>
template<class T>
T JECLIBRARYSHARED_EXPORT randomInteger(const T& max, const T& min = 0)
{
assertInteger(max);
qsrand((uint)QTime::currentTime().msec());
return qrand() % ((max + 1) - min) + min;
}
JecUtils.h
#include <typeinfo>
#include <QString>
#include <QRegExp>
#include <JecLibrary_global.h>
template<class T>
void JECLIBRARYSHARED_EXPORT assertInteger(const T& var)
{
static_assert(sizeof(T) != sizeof(bool) ||
sizeof(T) != sizeof(char) ||
sizeof(T) != sizeof(short) ||
sizeof(T) != sizeof(int) ||
sizeof(T) != sizeof(long), "T is not an integer.");
}
Единственная особенность этих подпрограмм состоит в том, что они являются шаблонными.Мне также интересно, есть ли проблема с зависимостями, потому что JecMath.h включает JecUtil.h, поэтому JecLibrary_global.h включается дважды, но я думал, что #Ifndef защитит от этого.Я попробую поэкспериментировать и опубликую любые результаты, которые я смогу получить.
Любая помощь будет оценена.Спасибо,
Джек