dlopen, dlsym - Verhalten
-
Hallo zusammen,
nachdem ich schon die meisten dlopen-Dokumentationen die man im I-Net so findet durchgelesen habe, frage ich einfach mal in diese Runde.
Leider hat die Platform, auf der ich dlopen verwende auch seine eigenen Bugs(Suse Linux 10.3), die in 10.4 einen rewrite erfahren haben.1. dlopen(A) scheitert, wenn die library.so ungeaufgelöste Symbole hat, unabhängig davon ob man überhaupt ein Symbol ausliest ( dlsym ).
Ist das so (posix)-korrekt ?2. Die obige Library(A) benötigt auch 3rd-Partie-Libraries(B) wie z.B. ACE/TAO. Diese sind aber nicht als Abhängigkeit in der A.so eingetragen, sondern als unaufgelöste Funktions-Referenzen --> Fehler 1
Diese musste ich voher per dlopen(B, RTLD_GLOBAL) laden um sie korrekt initialisieren und benutzen. Warum ?
Ist das ein sauberer Weg?
Wenn ich B nicht explizit kenne und evtl. ein falsches B lade(selbes Name-Mangling), wird das System niemals funktioneren, oder ?Greetz
PS: Ja ich bin gezwungen unter Suse zu arbeiten
-
Diese sind aber nicht als Abhängigkeit in der A
... Also die Fehler sind vielleicht nicht bei SUSE zu suchen, sondern beim Entwickler fuer A. Warum soll eine Bibliothek geladen werden, die man nicht verwenden kann? Um omnioese Bugs zur Laufzeit zu verursachen? In den manual pages (man dlopen) steht, dass _init() aufgerufen wird, das vielleicht gewisse Dinge initialisiert und Bibliothek A dafuer braucht. Die anderen Warums kannst du dir bestimmt selbst beantworten. Und ob 's POSIX-konform ist, kannst du selbst nachlesen. Ich tippe mal auf Ja.
-
nurf schrieb:
Diese sind aber nicht als Abhängigkeit in der A.so eingetragen, sondern als unaufgelöste Funktions-Referenzen --> Fehler 1
Diese musste ich voher per dlopen(B, RTLD_GLOBAL) laden um sie korrekt initialisieren und benutzen. Warum ?
Ist das ein sauberer Weg?und wenn du sie nicht per dlopen lädst sondern normal mit -l an den linker gibst?
da müsstest du evtl. noch -rdynamic mit angeben
-
DrGreenthumb schrieb:
nurf schrieb:
Diese sind aber nicht als Abhängigkeit in der A.so eingetragen, sondern als unaufgelöste Funktions-Referenzen --> Fehler 1
Diese musste ich voher per dlopen(B, RTLD_GLOBAL) laden um sie korrekt initialisieren und benutzen. Warum ?
Ist das ein sauberer Weg?und wenn du sie nicht per dlopen lädst sondern normal mit -l an den linker gibst?
da müsstest du evtl. noch -rdynamic mit angebenNormales Linken funktioniert, sofern ich dann auch Lib(B) dazulinke und soll explizit nicht durchgeführt werden.
Aber danke du hast vollkommen richtig mitgedacht.