Здравствуйте. Помогите с вопросом, пожалуйста.
Я пробую создать dll библиотеку. Использую Qt Visual Studio Add-in. Библиотеку Qt 4.8.2 собрал сам компилятором msvc2010.
Собственно делаю так:
1) Создаю проект библиотеки в Qt Visual Studio Add-in.
2) Создаётся автоматически файл экспорта:
#ifndef TEST_QT_DLL_GLOBAL_H
#define TEST_QT_DLL_GLOBAL_H
#include <QtCore/qglobal.h>
#ifdef TEST_QT_DLL_LIB
# define TEST_QT_DLL_EXPORT Q_DECL_EXPORT
#else
# define TEST_QT_DLL_EXPORT Q_DECL_IMPORT
#endif
#endif // TEST_QT_DLL_GLOBAL_H
2) Код самого класса:
#ifndef TEST_QT_DLL_H
#define TEST_QT_DLL_H
#include <QtGui\qtreeview.h>
#include "test_qt_dll_global.h"
class TEST_QT_DLL_EXPORT Test_Qt_DLL: public QTreeView {
Q_OBJECT
public:
Test_Qt_DLL(QWidget* pwgt = 0);
private:
};
#endif // TEST_QT_DLL_H
#include "test_qt_dll.h"
Test_Qt_DLL::Test_Qt_DLL(QWidget* pwgt) : QTreeView(pwgt) {
}
Но при компиляции выдаёт кучу ошибок линковки:
1>------ Перестроение всех файлов начато: проект: Test_Qt_DLL, Конфигурация: Debug Win32 ------
1> Moc'ing test_qt_dll.h...
1> moc_test_qt_dll.cpp
1> test_qt_dll.cpp
1> Создание кода...
1> Создается библиотека D:\Visual Studio\Test_Qt_DLL\Win32\Debug\Test_Qt_DLL.lib и объект D:\Visual Studio\Test_Qt_DLL\Win32\Debug\Test_Qt_DLL.exp
1>moc_test_qt_dll.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: virtual __thiscall QTreeView::~QTreeView(void)" (__imp_??1QTreeView@@UAE@XZ) в функции "public: virtual __thiscall Test_Qt_DLL::~Test_Qt_DLL(void)" (??1Test_Qt_DLL@@UAE@XZ)
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""__declspec(dllimport) public: virtual __thiscall QTreeView::~QTreeView(void)" (__imp_??1QTreeView@@UAE@XZ)"
1>moc_test_qt_dll.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: virtual void * __thiscall QTreeView::qt_metacast(char const *)" (__imp_?qt_metacast@QTreeView@@UAEPAXPBD@Z) в функции "public: virtual void * __thiscall Test_Qt_DLL::qt_metacast(char const *)" (?qt_metacast@Test_Qt_DLL@@UAEPAXPBD@Z)
1>moc_test_qt_dll.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: virtual int __thiscall QTreeView::qt_metacall(enum QMetaObject::Call,int,void * *)" (__imp_?qt_metacall@QTreeView@@UAEHW4Call@QMetaObject@@HPAPAX@Z) в функции "public: virtual int __thiscall Test_Qt_DLL::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Test_Qt_DLL@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>moc_test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""__declspec(dllimport) public: static struct QMetaObject const QTreeView::staticMetaObject" (__imp_?staticMetaObject@QTreeView@@2UQMetaObject@@B)"
1>test_qt_dll.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __thiscall QTreeView::QTreeView(class QWidget *)" (__imp_??0QTreeView@@QAE@PAVQWidget@@@Z) в функции "public: __thiscall Test_Qt_DLL::Test_Qt_DLL(class QWidget *)" (??0Test_Qt_DLL@@QAE@PAVQWidget@@@Z)
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual bool __thiscall QAbstractItemView::event(class QEvent *)" (?event@QAbstractItemView@@MAE_NPAVQEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::timerEvent(class QTimerEvent *)" (?timerEvent@QTreeView@@MAEXPAVQTimerEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall QWidget::setVisible(bool)" (?setVisible@QWidget@@UAEX_N@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class QSize __thiscall QAbstractScrollArea::sizeHint(void)const " (?sizeHint@QAbstractScrollArea@@UBE?AVQSize@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class QSize __thiscall QAbstractScrollArea::minimumSizeHint(void)const " (?minimumSizeHint@QAbstractScrollArea@@UBE?AVQSize@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall QWidget::heightForWidth(int)const " (?heightForWidth@QWidget@@UBEHH@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::mousePressEvent(class QMouseEvent *)" (?mousePressEvent@QTreeView@@MAEXPAVQMouseEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::mouseReleaseEvent(class QMouseEvent *)" (?mouseReleaseEvent@QTreeView@@MAEXPAVQMouseEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::mouseDoubleClickEvent(class QMouseEvent *)" (?mouseDoubleClickEvent@QTreeView@@MAEXPAVQMouseEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::mouseMoveEvent(class QMouseEvent *)" (?mouseMoveEvent@QTreeView@@MAEXPAVQMouseEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QAbstractScrollArea::wheelEvent(class QWheelEvent *)" (?wheelEvent@QAbstractScrollArea@@MAEXPAVQWheelEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::keyPressEvent(class QKeyEvent *)" (?keyPressEvent@QTreeView@@MAEXPAVQKeyEvent@@@Z)"
............
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QAbstractItemView::editorDestroyed(class QObject *)" (?editorDestroyed@QAbstractItemView@@MAEXPAVQObject@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class QModelIndex __thiscall QTreeView::moveCursor(enum QAbstractItemView::CursorAction,class QFlags<enum Qt::KeyboardModifier>)" (?moveCursor@QTreeView@@MAE?AVQModelIndex@@W4CursorAction@QAbstractItemView@@V?$QFlags@W4KeyboardModifier@Qt@@@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual int __thiscall QTreeView::horizontalOffset(void)const " (?horizontalOffset@QTreeView@@MBEHXZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual int __thiscall QTreeView::verticalOffset(void)const " (?verticalOffset@QTreeView@@MBEHXZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual bool __thiscall QTreeView::isIndexHidden(class QModelIndex const &)const " (?isIndexHidden@QTreeView@@MBE_NABVQModelIndex@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::setSelection(class QRect const &,class QFlags<enum QItemSelectionModel::SelectionFlag>)" (?setSelection@QTreeView@@MAEXABVQRect@@V?$QFlags@W4SelectionFlag@QItemSelectionModel@@@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class QRegion __thiscall QTreeView::visualRegionForSelection(class QItemSelection const &)const " (?visualRegionForSelection@QTreeView@@MBE?AVQRegion@@ABVQItemSelection@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class QList<class QModelIndex> __thiscall QTreeView::selectedIndexes(void)const " (?selectedIndexes@QTreeView@@MBE?AV?$QList@VQModelIndex@@@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class QFlags<enum QItemSelectionModel::SelectionFlag> __thiscall QAbstractItemView::selectionCommand(class QModelIndex const &,class QEvent const *)const " (?selectionCommand@QAbstractItemView@@MBE?AV?$QFlags@W4SelectionFlag@QItemSelectionModel@@@@ABVQModelIndex@@PBVQEvent@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QAbstractItemView::startDrag(class QFlags<enum Qt::DropAction>)" (?startDrag@QAbstractItemView@@MAEXV?$QFlags@W4DropAction@Qt@@@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class QStyleOptionViewItem __thiscall QAbstractItemView::viewOptions(void)const " (?viewOptions@QAbstractItemView@@MBE?AVQStyleOptionViewItem@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::drawRow(class QPainter *,class QStyleOptionViewItem const &,class QModelIndex const &)const " (?drawRow@QTreeView@@MBEXPAVQPainter@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual void __thiscall QTreeView::drawBranches(class QPainter *,class QRect const &,class QModelIndex const &)const " (?drawBranches@QTreeView@@MBEXPAVQPainter@@ABVQRect@@ABVQModelIndex@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall QWidget::devType(void)const " (?devType@QWidget@@UBEHXZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class QPaintEngine * __thiscall QWidget::paintEngine(void)const " (?paintEngine@QWidget@@UBEPAVQPaintEngine@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual struct HDC__ * __thiscall QWidget::getDC(void)const " (?getDC@QWidget@@UBEPAUHDC__@@XZ)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall QWidget::releaseDC(struct HDC__ *)const " (?releaseDC@QWidget@@UBEXPAUHDC__@@@Z)"
1>test_qt_dll.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual int __thiscall QWidget::metric(enum QPaintDevice::PaintDeviceMetric)const " (?metric@QWidget@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z)"
1>D:\Visual Studio\Test_Qt_DLL\Win32\Debug\\Test_Qt_DLL.dll : fatal error LNK1120: 93 неразрешенных внешних элементов
========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ==========
(Я пропустил часть вывода, так как размер сообщения превышал допустимый максимум для форума)
С чем это связано и что я делаю не так?