Shared library nutzt andere shared lib nicht

Hallo.
Ich möchte ein Programm schreiben, in das verschiedene Module eingebunden werden können. Diese Module sollen shared libs sein, die per dlopen() zur Laufzeit geladen werden.
Das klappt soweit auch ganz gut. Eines dieser Module greift aber seinerseit wieder auf eine shared lib zu, die muss aber nicht per dlopen() geladen werden. Das ganze compiliert auch problemlos, nur findet er die lib nicht :frowning:

g++ -fPIC -c myLib.cpp
g++ -shared -o myLib.so myLib.o
g++ -Wall -o myProg myProg.cpp -ldl

Führe ich myProg aus, lädt er zwar die Funktionen meiner sharedlib (geladen mit dlopen()) und führt sie auch aus, findet aber die Funktionen der 2.shared lib nicht (./myProg: symbol lookup error: ./dir1/dir2/myLib.so: undefined symbol: funktion_der_zweiten_lib).

Müsste ich die 2.lib nicht auch noch irgendwo einbinden? Normalerweise würde das ja beim linken des Programmteils passieren, der sie benutzt. Da dieser Teil (also meine Lib) aber nur ne .so werden soll, wird da ja nix gelinkt, oder?

Kann mir jemand sagen wo mein Fehler liegt? Danke…

Nachtrag1: sowohl der code vom Hauptprogramm, als auch der Code meiner Lib und der der zweiten Lib liegen alle 3 in unterschiedlichen Verzeichnissen, ebenso die entsprechenden Compilierergbnisse. Kann das zu Problemem führen?

Nachtrag2: dlfcn.h ist doch c, und nicht c++ oder? Gibt es vielleicht auch eine entsprechende c+±Variante, oder wird das auch da einfach weiterbenutzt?

bye Ronny

Hiho

g++ -fPIC -c myLib.cpp
g++ -shared -o myLib.so myLib.o
g++ -Wall -o myProg myProg.cpp -ldl

Führe ich myProg aus, lädt er zwar die Funktionen meiner
sharedlib (geladen mit dlopen()) und führt sie auch aus,
findet aber die Funktionen der 2.shared lib nicht (./myProg:
symbol lookup error: ./dir1/dir2/myLib.so: undefined symbol:
funktion_der_zweiten_lib).

Müsste ich die 2.lib nicht auch noch irgendwo einbinden?
Normalerweise würde das ja beim linken des Programmteils
passieren, der sie benutzt. Da dieser Teil (also meine Lib)
aber nur ne .so werden soll, wird da ja nix gelinkt, oder?

Kann mir jemand sagen wo mein Fehler liegt? Danke…

Nachtrag1: sowohl der code vom Hauptprogramm, als auch der
Code meiner Lib und der der zweiten Lib liegen alle 3 in
unterschiedlichen Verzeichnissen, ebenso die entsprechenden
Compilierergbnisse. Kann das zu Problemem führen?

ja, das _ist_ das Problem. solange du die nicht in Standardverzeichnissen hast einfach beim Linker ein -rpath pfad-zu-der-bibliothek mit dazugeben, also „gcc -Wl,-rpath -Wl,pfad …“

Nachtrag2: dlfcn.h ist doch c, und nicht c++ oder? Gibt es
vielleicht auch eine entsprechende c+±Variante, oder wird das
auch da einfach weiterbenutzt?

nix c+±variante, kannst dir ja eine basteln (so mit name mangling etc., dürfte spaßig werden (insbesondere, wenn es gehen würde (also mit allen features die c++ so hat), dann hätte es schon jemand gemacht :wink:) …

soweit,
mfg TLF

danke für die antwort! jetzt gehts!