Seite 1 von 1

statisches und dynamisches Linken

Verfasst: Mi Feb 27, 2013 3:08 pm
von Glocke
Hi, ich habe im Bereich Linking noch etwas Nachholebedarf bezüglich der Unterscheidung von statischem und dynamischem Linken.

Bisher ging ich davon aus, dass DLLs bzw. SOs statisch oder dynamisch linken kann. Beim dynamischen Linken gebe ich beim Kompilieren nicht an, auf welche Bibliothek ich mich beziehe und lade sie zur Lautzeit (dlopen bzw. die vergleichbare Funktion unter Windows). Auf Basis dieser Annahme ging ich bisher davon aus, dass statisches Linken erfolgt, indem ich z.B. dem Compiler die zu linkenden Bibliotheken mitteile (z.B. durch den Suffix "-lSDL" bei gcc).

Diese meine "Gedanken-Welt" hat bisher gehalten :D Allerdings bin ich dann über den Wiki-Artikel zur SDL gestoßen:
http://de.wikipedia.org/wiki/Simple_Dir ... _1.3.2F2.0
Im Gegensatz zu früheren Versionen nutzt SDL 1.3 die zlib-Lizenz.[14] Durch diese soll es möglich sein, proprietäre Produkte (Closed Source) zu entwickeln, welche die SDL dann auch statisch binden („linken“) dürfen.
Heißt das, dass bei proprietären Produkten die SDL nur dynamisch (also mit dlopen etc.) gelinkt werden darf? Oder ist das dynamische Linken nun doch das, was ich für statisches Linken hielt und das statische Linken etwas ganz anderes? :?

Kann ich davon ausgehen, dass sowohl bei statischem als auch dynamischen Linken die DLLs bzw. SOs auf dem Rechner vorhanden sein müssen? Aus meiner derzeitigen Sicht wäre das einfach nur absolut logisch, dass es so ist. Inzwischen zweifel ich aber an meinem Wissen zu dieser Thematik insgesamt :lol:

Ich hoffe ihr könnt mir helfen :)

LG Glocke

Re: statisches und dynamisches Linken

Verfasst: Mi Feb 27, 2013 3:44 pm
von Xin
Statisches Linken bedeutet, dass kompilierter Code (eine .a oder .lib Datei) in Dein Programm hinzugefügt wird. Dein Programm wird also größer.

Wenn Du jetzt zum Beispiel gegen KDE linkst, wäre es etwas übertrieben pro Programm gleich KDE miteinzubinden. Also linkt man dynamisch. Dynamisch wird die .so bzw. .dll angesprochen. Damit Dein Programm die .so/.dll ansprechen kann, wird Deinem Programm ein kleines Programm (.a/.lib) hinzugelinkt, die nur die Aufgabe hat, die .so/.dll zu öffnen und Dir die Funktionen zur Verfügung zu stellen. Du rufst also die Funktion in der .a/.lib und dort wird dafür gesorgt, dass die zugehörige Funktion in der .so/.dll gerufen wird.

Dynamisches Linken ist also auch statisches Linken, wobei die gerufene Funktionalität aber in einer externen Datei liegt und der statische Teil nur die Vermittlung zur externen Datei übernimmt.