无法加载Qt插件
我在呼叫时使用Qt5.3和无法加载Qt插件,qt,qt-necessitas,Qt,Qt Necessitas,我在呼叫时使用Qt5.3和 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); bool pluginLoaded = pluginLoader.isLoaded(); 它给出了错误的: //serverplugin.h #ifndef SERVERPLUGIN_H #define SERVERPLUGIN_H #include <QObject> #include <QtPlugin
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
bool pluginLoaded = pluginLoader.isLoaded();
它给出了错误的:
//serverplugin.h
#ifndef SERVERPLUGIN_H
#define SERVERPLUGIN_H
#include <QObject>
#include <QtPlugin>
#include "acepos/aceclient/serverinterface.h"
#include <QThread>
#include "server.h"
class ServerPlugin : public QObject,
public ServerInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.AcePos.ServerInterface/1.1" FILE "serverplugin.json")
Q_INTERFACES(ServerInterface)
QThread *m_pServerThread;
Server *m_pServer;
public:
ServerPlugin():m_pServerThread(NULL), m_pServer(NULL){}
private slots:
//void handleServiceStartNotify();
public:
bool startServerService();
bool stopServerService();
};
#endif
//serverinterface.h
#ifndef SERVERINTERFACE_H
#define SERVERINTERFACE_H
#include <QtPlugin>
class ServerInterface
{
public:
virtual ~ServerInterface() { }
virtual bool startServerService() = 0;
virtual bool stopServerService() = 0;
};
#define ServerInterface_iid "org.qt-project.Qt.AcePos.ServerInterface/1.1"
Q_DECLARE_INTERFACE(ServerInterface, ServerInterface_iid)
#endif // SERVERINTERFACE_H
请让我知道,如果有什么错误,我在创建插件
当我构建插件项目时,我能够看到生成的库文件。我这样做是为了android qt项目。调试时,它工作正常。我在开发过程中对插件部分进行了更改。QPluginLoader进行以下检查:
相同的生成配置发布/调试,但在类Unix系统上除外
相同的主版本和次/补丁版本等于或小于Qt的应用程序次/补丁版本
开发时,有时会忘记使用正确的Qt配置重建插件,导致插件未加载。解决方案:使用正确的构建配置重新构建插件
您还可以在应用程序的启动环境中设置QT_DEBUG_PLUGINS=1,以获取有关插件加载的详细调试信息。我昨天偶然发现了这个问题,下面是我为解决这个问题所做的: 请注意,我的插件和使用插件的应用程序都处于调试模式,并且使用相同版本的Qt构建,所以这不是问题所在。问题是我忘了在插件的主导出类中添加以下行:
Q_PLUGIN_METADATA(IID "namespace.if.any.classname" FILE "package.json")
在此之后,我加载插件没有问题。das errorString怎么说?errorString说:在windows机器上,插件验证数据不匹配即使pluginloader说false,我也能得到插件实例QObject*plugin=pluginloader.instance;如果插件{Qdebuga您确定在发布模式下加载插件的发布版本吗?QPluginLoader不会在发布模式下加载调试插件,反之亦然。当它尝试加载文件时,会发生此错误。但是当它尝试加载.dll void MainFrame::loadPlugin fileName serverplugind.dll void MainFrame::loadPlugin pluginload false void MainFr时ame::loadPlugin插件加载未知error@Abin,我知道你会的。我只是决定发布这个答案,以防有人会因为与你不同的原因而面临同样的问题。