2014-10-11 170 views
2

我使用Qt 5.3和打电话时无法加载的Qt插件

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项目做这个。调试时,它工作正常。我在开发过程中对插件进行了修改。

+0

什么das errorString()说? – Silicomancer 2014-10-11 07:44:22

+0

errorString说:“插件验证数据不匹配” – Abin 2014-10-11 08:03:53

+0

即使pluginloader表示false,我也能够获得插件实例QObject * plugin = pluginLoader.instance();如果(插件){qDebug()<< Q_FUNC_INFO <<“插件实例加载”; m_pServerInterface = qobject_cast (插件); if(NULL!= m_pServerInterface){qDebug()<< Q_FUNC_INFO <<“插件已成功载入”; }甚至 – Abin 2014-10-11 08:04:12

回答

3

QPluginLoader进行以下检查:

  • 相同构建配置(释放/调试,除了在类Unix系统)
  • 相同的主版本和次/补丁版本比应用次要/补丁等于或小于Qt的版本

当开发人员有时会忘记重新构建具有正确Qt配置的插件,导致插件未加载。解决方案:使用正确的构建配置重新构建插件。

您还可以在应用程序的启动环境中设置QT_DEBUG_PLUGINS=1以获取有关插件加载的更详细的调试信息。

0

昨天我偶然发现了这个问题,下面是我所做的修正: 请注意,我的插件和使用该插件的应用程序都处于调试模式,并使用相同版本的Qt构建,所以不是问题。问题是,我忘了把下面一行主要出口类的插件:

Q_PLUGIN_METADATA(IID "namespace.if.any.classname" FILE "package.json") 

在此之后我没有问题,加载插件。

+0

我已经在serverplugin.h – Abin 2016-03-18 09:49:01

+0

@Abin,我知道你有。我只是决定发布这个答案,如果有人会面临同样的问题,不是因为你的原因。 – armanali 2016-03-18 17:06:42

相关问题