PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt4 dynamische Plugins mit Libs



xmarvel
25-11-2006, 15:44
Hi,

hab hier ein sehr komisches Problem zur Zeit.
Habe mehrere selbst geschriebene dynamische Low-Level Plugins für Qt4 geschrieben. Bis jetzt lief alles Problemlos nur jetzt will ich ein Plugin mit einer anderen Library dazulinken und da gibt es Trouble mit Qt4. :(
Qt4 kriegt dieses Plugin nicht geladen ich bekomme per QPluginLoader immer ein Null Zeiger zurückgeliefert. Wenn ich allerdings die Library nicht dazulinke sondern fest ein kompiliere mit dem Programm funktioniert das Plugin wieder.

Als Buildtool benutze ich cmake
Hier mal der relevante Abschnitt in der CMakeList.txt


QT4_WRAP_CPP( MOC_SDP sdp.h )
ADD_LIBRARY( sdp SHARED ../../core/property_data.cpp sdp.cpp sdp_config.cpp ${MOC_SDP} )
TARGET_LINK_LIBRARIES( sdp serdisp )


und hier vom Linker der Aufruf:


/usr/bin/c++ -fPIC -shared -Wl,-soname,libsdp.so -o libsdp.so "CMakeFiles/sdp.dir/__/__/__/__/src/core/property_data.o" "CMakeFiles/sdp.dir/sdp.o" "CMakeFiles/sdp.dir/sdp_config.o" "CMakeFiles/sdp.dir/moc_sdp.o" -lserdisp


Gruss,
xmarvel

anda_skoa
25-11-2006, 15:52
Ist die andere Library für den Runtimelinker auffindbar?

Ciao,
_

xmarvel
25-11-2006, 16:10
ja ldconfig hab ich ausgeführt das Linken und das Compilieren des Plugins funktioniert auch.

Gruss,
xmarvel

anda_skoa
26-11-2006, 13:56
Hmm.

Du kannst nach dem fehlgeschlagenen Loading die globale Variable errno auswerten, bzw mit strerror()
Vielleicht kommst du so zu besseren Informationen.

Wenn du
$ ldd plugin.so

machst, wird dann die zusätzliche Lib gefunden?

Und um sicher zu gehen: das Programm wird im selben Environment gestartet das, richtig?
(Manchmal vergisst man, daß man in einer interaktiven Shell ein anderes Environment hat, als in der Desktopumgebung)

Ciao,
_

xmarvel
30-11-2006, 11:01
Hmm.

Du kannst nach dem fehlgeschlagenen Loading die globale Variable errno auswerten, bzw mit strerror()
Vielleicht kommst du so zu besseren Informationen.

Wenn du
$ ldd plugin.so

machst, wird dann die zusätzliche Lib gefunden?

Und um sicher zu gehen: das Programm wird im selben Environment gestartet das, richtig?
(Manchmal vergisst man, daß man in einer interaktiven Shell ein anderes Environment hat, als in der Desktopumgebung)

Ciao,
_

danke daran lag es LD_LIBRARY_PATH war nicht auf den Pfad der Lib gesetzt. :rolleyes:

Daraus erschließt mich jetzt die Frage ist dafür der Programmierer beim übersetzen "verantwortlich" das alle Library Pfade vom System richtig gesetzt werden oder der User?

Gruss,
xmarvel

anda_skoa
30-11-2006, 18:19
Der. der es installiert.

Bei einem Distributionspaket der Packager, bei einem selbst kompilierten Programm der User, bei einem externen Installer der Auslieferer/Programmierer

Ciao,
_