无法加载Qt插件

无法加载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

我在呼叫时使用Qt5.3和

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,我知道你会的。我只是决定发布这个答案,以防有人会因为与你不同的原因而面临同样的问题。