dynamische Bibliotheken linken?
-
Hey,
ich arbeite gerade mit dynamischen Bibliotheken und nun ist es so, das eine Bibliothek, teile einer anderen benötigt. Muss man diese nun gegeneinander linken? Oder löst der Runtimelinker das anderweitig auf? Weil die Standartbibliotheken werden von ldd, auf dynamische Bibliotheken angewendet, die diese benutzen, auch nicht anzeigt wie es bei einem Programm, im Vergleich, üblich wäre.
Ich arbeite unter Linux von daher bitte keine Windows spezifischen Lösungen.
Danke,
Jud4s
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Unter linux gibts generell 2 Möglichkeiten, dynamisch zu linken.
1. Du linkst wie statisch, nur eben mit dem "shared" flag.
Das heisst dein Programm/Biliothek "Header", also der Coder der immer ausgefuehrt wird bevor du das erste mal deinen Code im Programm/bib anspringst, zieht die .so an und du kannst die normal verwenden. Diese Abhaengigkeit sollte man aber mit speziellen tools (ldd) sehen.Wenn der "Header" die .so ned findet, wird ne Standard Error Procedure eingeleitet, keine Ahnung wie die unter Linux aussieht. Warhscheinlich gibts nen Text auf cerr und SigTerm wird ausgeloest.
2. Du kannst 100% selbst dynamisch libs(.so) anziehen. dlopen, dlsym, dlclose etc sind die Befehle zu. Das heisst du bestimmst selbst, wann wie wo das ding angezogen wird und wieder freigegeben wird. Die Infos befinden sich dann ned im "Header" deines Progs/Deiner Lib sondern im compilat. Tools(ldd) sollten dann keine chance haben, diese Abhaengigkeit zu entdecken. Gibts die .so nicht, liefert Dir dlopen auch nurn fehlercode zurueck, und du bestimmst selber was passiert. Das ist überhaupt die Vorraussetzung dazu, das man plugins bauen kann.
Ob du selber noch mal gegen die lib(.so) linken musst, bestimmt wie die .so die von Dir verwendet wird, gelinkt wurde. Hat diese .so den eintrag in Ihrem "Header" (kannst mit ldd checken), wird sie es selber tun. Hat sie ihn nicht, verweisst sie nur auf externe symbole und du muesstest selber "linken".
Die Frage ist wie dann zumindest die direkt verwendeten Einsprungpunkte in die .so vom Linker aufgeloest werden, ob das dann zu bauen geht.
Denk mal die Chance unter Linux ist gross, das die .so's sich selber Ihre Abhaengigkeiten laden.
(ich komm aus der Windows Welt ...)Ich arbeite unter Linux von daher bitte keine Windows spezifischen Lösungen.
Linux und Windows sollten da nicht sooo verschieden sein. Unterschiede sind die Execute und Dll Header, wo windows diesen Lademechanismus nicht hat. Deshalb wird es da ueber "Importlibs" gelöst, die am Ende genau das selbe "nachrüsten".
Ciao ...