首先:新建了一个工程,用于产生 plugin 的静态库;
plugin 的.pro
QT += core \
gui
TARGET = ekeyboard
TEMPLATE = lib
CONFIG += plugin\
static
DESTDIR = $$[QT_INSTALL_PLUGINS]/styles
SOURCES += keypaddriverplugin.cpp \
keypadhandler.cpp
HEADERS += keypaddriverplugin.h \
keypadhandler.h
在DESTDIR 路径底下可以看到 生成的 libekeyboard.a 文件
应用程序的 .pro 如下:
TARGET = windget
TEMPLATE = app
QTPLUGIN +=ekeyboard
LIBS +=-L/opt/qtsdk-2010.01/qt/plugins/styles
SOURCES += main.cpp \
widget.cpp \
HEADERS += widget.h \
FORMS += widget.ui
main.cpp 如下
#include <QtGui/QApplication>
#include "widget.h"
#include <QtPlugin>
Q_IMPORT_PLUGIN(ekeyboard)
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
widget *w = new widget();
w->show();
return a.exec();
}
生成插件的工程,跟应用程序的工程在不同的路径下,编译的时候,会出现:
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypaddriverplugin.o): In function `~KeypadDriverPlugin':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypaddriverplugin.o): In function `KeypadDriverPlugin':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:7: undefined reference to `QKbdDriverPlugin::QKbdDriverPlugin(QObject*)'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:7: undefined reference to `QKbdDriverPlugin::QKbdDriverPlugin(QObject*)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o): In function `~keypadHandler':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o):/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: more undefined references to `QWSKeyboardHandler::~QWSKeyboardHandler()' follow
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o): In function `keypadHandler':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:29: undefined reference to `QWSKeyboardHandler::QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:49: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:29: undefined reference to `QWSKeyboardHandler::QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:49: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o): In function `KeypadDriverPlugin::qt_metacall(QMetaObject::Call, int, void**)':
/home/tommy/omap/proc/ekeyboard/ekeyboard/moc_keypaddriverplugin.cpp:64: undefined reference to `QKbdDriverPlugin::qt_metacall(QMetaObject::Call, int, void**)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o): In function `KeypadDriverPlugin::qt_metacast(char const*)':
/home/tommy/omap/proc/ekeyboard/ekeyboard/moc_keypaddriverplugin.cpp:59: undefined reference to `QKbdDriverPlugin::qt_metacast(char const*)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o):(.data.rel.ro+0x0): undefined reference to `QKbdDriverPlugin::staticMetaObject'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o):(.data.rel.ro._ZTI18KeypadDriverPlugin[typeinfo for KeypadDriverPlugin]+0x8): undefined reference to `typeinfo for QKbdDriverPlugin'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypadhandler.o):(.data.rel.ro._ZTV13keypadHandler[vtable for keypadHandler]+0x48): undefined reference to `QWSKeyboardHandler::processKeyEvent(int, int, QFlags<Qt::KeyboardModifier>, bool, bool)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypadhandler.o):(.data.rel.ro._ZTI13keypadHandler[typeinfo for keypadHandler]+0x18): undefined reference to `typeinfo for QWSKeyboardHandler'
collect2: ld 返回 1
make: *** [windget] 错误 1
Exited with code 2.
Error while building project windget
When executing build step 'Make'
其中 KeypadDriverPlugin 是插件的类
以上错误: 请高手帮忙下