2015-05-09 6 views
6

Ich habe rohe (kein QtDesigner) Qt5-Projekt mit zwei einfachen Plugins, die man nicht laden mit lakonischen Fehler: "Plugin Verification Data Mismatch"."Plugin Verification Data Mismatch" beim Laden Plugin für QT5-Projekt

-Header des ersten Plugin (die Lasten und gut laufen):

#ifndef __PIROGRONIAN__P2P2__GUI_PLUGIN__H__ 
#define __PIROGRONIAN__P2P2__GUI_PLUGIN__H__ 

#include "QtCore/QtCore" 
#include "PluginInterface.h" 

namespace P2P2 { 

    class GuiPlugin : public QObject, public PluginInterface { 
     Q_OBJECT 
     Q_PLUGIN_METADATA(IID "Pirogronian.P2P2.GuiPlugin") 
     Q_INTERFACES(P2P2::PluginInterface) 

    public: 
     bool init(CoreServer *); 
     bool receiveObject(Object*); 
     int channelType(); 
    }; 
}; 

#endif 

Die zweite, die Last nicht:

#ifndef __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__ 
#define __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__ 

#include <QtNetwork/QtNetwork> 
#include "Chat.h" 
#include "PluginInterface.h" 

namespace P2P2 { 

    class ChatPlugin : public QObject, public PluginInterface { 
     Q_OBJECT 
     Q_PLUGIN_METADATA(IID "Pirogronian.P2P2.ChatPlugin") 
     Q_INTERFACES(P2P2::PluginInterface) 

     CoreServer *_server; 
     QHash<Channel *, Chat *> _chats; 

    public: 
     virtual bool init(CoreServer *); 
     virtual bool receiveObject(Object *); 
     virtual int channelType(); 
    }; 

}; 

//Q_DECLARE_METATYPE(QPointer<P2P2::ChatPlugin>) 

#endif 

Hier ist PluginInterface Header:

#ifndef __PIROGRONIAN__P2P2__PLUGIN_INTERFACE__H__ 
#define __PIROGRONIAN__P2P2__PLUGIN_INTERFACE__H__ 

#include "CoreServer.h" 

namespace P2P2 { 

    class PluginInterface { 
    public: 
     virtual bool init(CoreServer *) = 0; 
     virtual bool receiveObject(Object *) = 0; 
     virtual int channelType() = 0; 
    }; 

}; 

Q_DECLARE_INTERFACE(P2P2::PluginInterface, "Pirogronian/P2P2/PluginInterface/1.0") 

#endif 

Ich bin kein Experte und schreiben Plugins für Qt5 ist sehr kursorisch beschrieben. Aber da ich keinen wesentlichen Unterschied zwischen diesen Plugins feststellen kann, wird das Problem für mich ziemlich mysteriös. Mayby ein Fehler in Qt? Ich habe beide Male mehrmals umgebaut, um sicher zu gehen, dass beide auf dem neuesten Stand sind.

Ich versuche, den gesamten Code irgendwo in Netz gestellt, aber es wird eine Weile ... Edit nehmen: done - als zip-gepackt hier: http://uploaduj.net/D74c2f/v0-1-pure-zip/

+0

Umgebungsvariable QT_DEBUG_PLUGINS auf nicht Null setzen .. Programm erneut ausführen, Fehlermeldung hier ausgeben. – Greenflow

+0

Bereits getan, aber es gibt keine Nachrichten darüber, was mit dem zweiten Plugin falsch ist, nur über geladene. – pirogronian

+0

Du meinst das zweite Plugin wird nicht einmal in der Ausgabe erwähnt? Das ist nicht möglich. Erfolgreich geladene Plugins werden in der Konsole geloggt, wenn diese Variable gesetzt ist, und noch mehr fehlgeschlagene Ladeversuche. Wenn es nichts gibt, wird Ihr Plugin nicht gefunden. – Greenflow

Antwort

1

Nicht sicher, ob es hilft, aber es scheint, dass Ihre Plugin hat ungültige Metadaten. Hier ist Code, der die Fehlermeldung http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/plugin/qlibrary.cpp#n303

setzt Sie können Debug-Version von Qt verwenden und Haltepunkt in dieser Funktion festlegen. Dies würde Ihnen eine genaue Zeile geben, die beim Laden Ihres Plugins fehlschlägt.

Möglicherweise haben Sie einen Fehler in Ihren Metadaten?

+0

Ungültige Festschreibungsreferenz. Veraltete Verbindung? –

+0

danke, feste Verbindung –