0
我想在我的qt程序中有一個插件系統。Qt無法加載插件:undefined symbol iPlugin :: staticMetaObject
即使我認爲我的代碼是好的,我仍然在主程序中有鏈接錯誤。 我正在使用QPluginLoader來加載插件。該方法實例化返回空指針和錯誤字符串是:
Cannot load library *library* : (*library*: undefined symbol: _ZN7iPlugin16staticMetaObjectE)
這裏是接口iPlugin.h:
#ifndef IPLUGIN_H
#define IPLUGIN_H
#include <QObject>
#include <QtPlugin>
class QWidget;
class iPlugin : public QObject
{
Q_OBJECT
public:
virtual ~iPlugin() {}
virtual const QString &getName() const = 0;
virtual QWidget *onStart() = 0;
public slots:
virtual void onMenu() = 0;
};
Q_DECLARE_INTERFACE(iPlugin, "Project.iPlugin")
#endif // IPLUGIN_H
的插件文件textplugin.h
#ifndef TEXTPLUGIN_H
#define TEXTPLUGIN_H
#include <QObject>
#include "iplugin.h"
class QString;
class TextPlugin : public iPlugin
{
Q_OBJECT
Q_INTERFACES(iPlugin)
public:
TextPlugin();
virtual ~TextPlugin();
const QString &getName() const;
QWidget *onStart();
public slots:
void onMenu();
private:
const QString _name;
};
#endif // TEXTPLUGIN_H
和插件文件textplugin.cpp:
#include <QString>
#include "textplugin.h"
#include "textwidget.h"
#include <iostream>
TextPlugin::TextPlugin() :
_name("text")
{
std::cout << "Hello" << std::endl;
}
TextPlugin::~TextPlugin()
{
}
const QString &TextPlugin::getName() const
{
return (this->_name);
}
QWidget *TextPlugin::onStart()
{
return (new TextWidget);
}
void TextPlugin::onMenu()
{
}
Q_EXPORT_PLUGIN2(plug_text, TextPlugin)
有沒有人有想法? 我被困在裏面約6個小時,我瘋了。
在此先感謝
編輯:我提出QT5,使用Q_PLUGIN_METADATA(IID 「Project.plug_text」)在我的班級宣言和刪除Q_EXPORT_PLUGIN2(plug_text,TextPlugin) cpp文件,但沒有的已經改變了,錯誤是一樣的。
EDIT2:我已經忘記了QPluginLoader代碼,那就是:
QPluginLoader loader("/home/bambou/build-TestPlugin-Desktop-Debug/plugin/libplug_text.so");
if (QObject *obj = loader.instance()) {
std::cout << "hello !" << std::endl;
iPlugin *plugin = qobject_cast<iPlugin *>(obj);
this->registerPlugin(file, plugin);
} else {
std::cout << loader.errorString().toStdString() << std::endl;
}
那麼,如果沒有看到包含QPluginLoader在內的代碼,就很難說。 – lpapp 2014-11-02 02:14:16
您仍然隱藏重要的細節,例如''* lib的絕對路徑,出於調試目的*「,請不要混淆這些。 – lpapp 2014-11-02 08:10:53
我已添加路徑。 – Bambou 2014-11-02 08:20:39