undefined reference to qt_static _plugin
-
Hi,
I am trying to load a static plugin in Qt for which I have tried the below code. My project name is "static_plugin_qmake".
I am creating a static plugin called "plugin_qmake" and trying to load it through a application "launcher"static_plugin_qmake.pro
TEMPLATE = subdirs SUBDIRS = plugin_qmake \ launcher launcher.pro TEMPLATE = app QT += widgets HEADERS = interface.h SOURCES += main.cpp LIBS += "/home/uidm9805/Qt Projects/static_plugin_qmake/build/plugin_qmake/libplugin_qmake.a"
interface.h
#ifndef INTERFACE_H #define INTERFACE_H #include <QtPlugin> class Interface { public: virtual ~Interface() {} virtual void setValue(int value) = 0; virtual int getValue() = 0; }; #define Interface_iid "interface_identifier_id" Q_DECLARE_INTERFACE(Interface, Interface_iid) #endif // INTERFACE_H
main.cpp
#include <QApplication> #include <QtPlugin> #include <QDebug> Q_IMPORT_PLUGIN(plugin_qmake) int main(int argc, char *argv[]) { QApplication app(argc, argv); qDebug() << "Hello World"; return app.exec(); }
plugin_qmake.pro
TEMPLATE = lib CONFIG += plugin static QT += widgets INCLUDEPATH += ../.. HEADERS = pluginqmake.h SOURCES = pluginqmake.cpp TARGET = $$qtLibraryTarget(plugin_qmake)
pluginqmake.h
#ifndef PLUGINQMAKE_H #define PLUGINQMAKE_H #include <QObject> #include <QtPlugin> #include "../launcher/interface.h" class PluginQmake : public QObject, public Interface { Q_OBJECT Q_PLUGIN_METADATA(IID Interface_iid) Q_INTERFACES(Interface) public: void setValue(int value); int getValue(); private: int mValue; }; #endif // PLUGINQMAKE_H
pluginqmake.cpp
#include "pluginqmake.h" void PluginQmake::setValue(int value) { mValue = value; } int PluginQmake::getValue() { return mValue; }
But when I build this project, I get following errors:
/home/uidm9805/Qt Projects/static_plugin_qmake/launcher/main.cpp:6: error: undefined reference to 'qt_static_plugin_plugin_qmake()' collect2: error: ld returned 1 exit status
I don't understand why I am getting this error? I need help to make it work.....
-
@NIXIN I think you forgot "QTPLUGIN += " in your pro file as described here: http://doc.qt.io/qt-5/plugins-howto.html#static-plugins
-
@NIXIN Sorry, my post was wrong.
"Link your application with your plugin library using LIBS in the .pro file." - so, using LIBS is correct. But you're using it wrongly, it should be:LIBS += -L"/home/uidm9805/Qt Projects/static_plugin_qmake/build/plugin_qmake" -lplugin_qmake
Better to use relative paths, see http://doc.qt.io/qt-5/qtwidgets-tools-plugandpaint-app-example.html
-
TEMPLATE = app QT += widgets HEADERS = interface.h SOURCES += main.cpp #LIBS += "/home/uidm9805/Qt Projects/static_plugin_qmake/build/plugin_qmake/libplugin_qmake.a" LIBS += -L"/home/uidm9805/Qt Projects/static_plugin_qmake/build/plugin_qmake" -lplugin_qmake
-
@jsulm I tried same thing with this example http://doc.qt.io/qt-5/qtwidgets-tools-plugandpaint-app-example.html and its working fine there
LIBS += "/home/uidm9805/Qt Projects/plugandpaint/build/plugandpaint/plugins/libpnp_basictools.a"
don't know why this project is behaving in odd manner