The file '...' is not a valid Qt plugin.

Alles rund um die Programmierung mit Qt
Antworten
domachine
Beiträge: 2
Registriert: 16. November 2009 17:50

The file '...' is not a valid Qt plugin.

Beitrag von domachine »

Ich hab ein Problem mit dem dynamischen Laden von Plugins.

Ich habe ein eigenes Plugin Interface und ein Plugin, das das Interface implementiert geschrieben. Wenn ich nun aber versuche, das Plugin zu Laden, gibt der QPluginLoader
einen NULL-Pointer und den im Titel genannten Error String zurück.

Das komische ist aber, dass er beim ersten versuch, das Plugin zu laden einen Plugin verification data mismatch zurückliefert und bei erneutem Versuch zu laden (ohne Neukompilation), die oben genannte Fehlermeldung. Ich bin schon den ganzen tag am suchen.

Das Plugin als auch die Hauptapplikation wurden auf der selben Plattform und mit dem selben Compiler gebaut. Beide mit Unterstützung von QMake.
Außerdem sind im Plugin mit Sicherheit alle Symbole aufgelöst. Daran sollte es also auch nicht liegen. Ich bin langsam echt am Verzweifeln, aber die Hoffnung stirbt zuletzt :-D .

Hier mein Interface:

Code: Alles auswählen

#ifndef  BOOKPLUGIN_INC
#define  BOOKPLUGIN_INC

#include <QtPlugin>

namespace obripper {
    class Book;

    class BookPlugin {
    public:
        virtual ~BookPlugin() {}
        virtual bool processBook(const Book& book) = 0;
    };
}

Q_DECLARE_INTERFACE(obripper::BookPlugin, "obripper.BookPlugin/0.1")

#endif   /* ----- #ifndef BOOKPLUGIN_INC  ----- */
Und die Header-Datei meines Plugins, ich denk die Sourcen sind nicht nötig, falls doch, sagt Bescheid, dann stell ich sie auch noch rein:

Code: Alles auswählen

#ifndef  GALILEO_PLUGIN_INC
#define  GALILEO_PLUGIN_INC

#include <obripper/bookplugin.h>
#include <QObject>

class Book;

class GalileoPlugin : public QObject, public obripper::BookPlugin {

    Q_OBJECT
    Q_INTERFACES(obripper::BookPlugin)
        
public:
    bool processBook(const obripper::Book& book);
};

#endif   /* ----- #ifndef GALILEO_PLUGIN_INC  ----- */
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag von spatro »

Hast du am ende der Sourcen deines Plugins das export Macro aufgerufen?

Q_EXPORT_PLUGIN2(galileoPlugin,GalileoPlugin);
domachine
Beiträge: 2
Registriert: 16. November 2009 17:50

Beitrag von domachine »

spatro hat geschrieben:Hast du am ende der Sourcen deines Plugins das export Macro aufgerufen?

Q_EXPORT_PLUGIN2(galileoPlugin,GalileoPlugin);
Bingo, das wars, danke!!

Mann ich sollte mir angewöhnen die docs genauer zu lesen. War scheins schon so verbissen, dass mir das in der Hektik voll entgangen ist!!

Vielen Dank,
Gruß Domi
Antworten