Seite 1 von 1

[gelöst] QPluginLoader + Singleton

Verfasst: 23. Mai 2010 10:02
von BananaMan
Hallo!

Bin mir nicht ganz sicher ob dies nicht doch in den C++ bereich gehört, oder hier doch richtig ist.

Folgendes Problem:
Ich habe ein Hauptklasse welche ich als Singleton implementiert habe. Das klappt soweit gut, nur wenn ich in einem Plugin, welches mittels QPluginLoader geladen wird, auf diese Klasse zugreife, stürtzt es ab und ich bekomme eine Fehlermeldung, dass das Symbol undefiniert sei.

Habs schon mit QPluginLoader::setLoadHints(QLibrary::ResolveAllSymbolsHint); probiert, jedoch ohne Erfolg.

Hat jemand nen hilfreichen Tipp?

Verfasst: 23. Mai 2010 11:39
von franzf
Bitte etwas genauer ;)
Was ich bisher verstanden habe:
* Du hast eine Hauptanwendung
* Du erweiterst diese über Plugins
* Dein Plugin soll auf ein Singleton zugreifen
* "undefined symbol" (eigentlich "symbol lookup error", oder?)

Wenn du deine Hauptanwendung nicht in eine Lib gesteckt hast, und dein Plugin auch nicht dagegen gelinkt ist, sollte das Plugin nicht mal ordentlich linken (undefined reference to ...).

Kannst du mal die genaue Fehlermeldung posten, und etwas zu den anderen Punkten von oben sagen?

Verfasst: 23. Mai 2010 12:33
von BananaMan
Danke für die Antwort!

Habe das Problem jetzt nachgecodet (wäre sonst zu unübersichtlich ^^).

Wenn ich in dem Programm (z.B. mainclass.cc:20) auf meine Singleton Klasse zugreife (MainClass::instance()->helloWorld();) funktioniert das Problemlos. (wäre komisch wenn nicht ^^).
Aber sobald ich ein Plugin via QPluginLader lade, welcher den selben Befehl ausführt, bekomme ich folgende Fehlermeldung:

./Test: symbol lookup error: /home/bananaman/Test/TestPlugin/libTestPlugin.so.1.0.0: undefined symbol: _ZN9MainClass8instanceEv

Vielen Dank für die Hilfe!

Verfasst: 23. Mai 2010 12:48
von franzf
So wie ich es vermutet habe. Und die Lösung hab ich auch schon gepostet. Alles was aus deinem "Hauptprogramm" in deinem Plugin verwendet werden soll, musst du in eine eigene lib packen, und dein Plugin gegen diese Lib linken.

Verfasst: 23. Mai 2010 13:52
von BananaMan
arg... perfekt, danke ! :D