Was ist der Unterschied zwischen Statischem und Dynamischen Linken?
-
Kann mir das einer erklären?
Ich will nämlich eine Library für mein Programm verwenden die unter der LGPL Lizenz steht und da muß ich ja anscheinend dynamisch linken da ich mein Programm
nicht unter die LGPL Lizenz stellen will, wie mache ich das aber jetzt,
wie linke ich mein Programm zu dieser Library dynamisch?Was soll ich darunter genau verstehen?
Und wie geht das?
-
beim statischen Linken wird der Code der Bibliothek direkt in dein Programm gebunden, beim dynamischen Linken ruft dein Programm beim Ausführen die Bibliothek mit auf. Dies bedeutet dann aber auch, dass selbige vorhanden sein muss...
-
Darf man mit LGPL libs nicht eh kommerzielle / nicht opensource produkte entwickeln? ich dachte für diese beschränkung bei der GPL ist ja die LGPL gedacht. Zur Frage: beim dynamischen Linken ist die lib extern als DLL (unter linux .so) vorhanden und wird zur laufzeit aufgerufen.
-
DocJunioR schrieb:
beim statischen Linken wird der Code der Bibliothek direkt in dein Programm gebunden, beim dynamischen Linken ruft dein Programm beim Ausführen die Bibliothek mit auf. Dies bedeutet dann aber auch, dass selbige vorhanden sein muss...
Bedeutet statisches Linken also, das ich den Source Code einer Bibliothek nehme
und dann in meinen Programmcode reinkopiere und dynamisches Linken, daß ich
einfach die Library include und dann eine Funktion davon aufrufe?
-
nein.
statisch linken heisst, dass der Linker einfach deinen Code und den Code der Library zusammen in eine ausführbare Datei packt. Also statisch, so das die fest verdrahtet sind.
dynamisch linken heisst, dass der Linker nur in das Binary schreibt, welche Library benötigt wird und wenn du das Programm startest, schaut dein Betriebsystem nach der Library und lädt diese in den Speicher.
ersteres ist besser, wenn man nicht davon ausgehen kann, dass die Library installiert ist bei dem User oder du wegen der schlechten dynamischen Link Implementierung deines Systems Angst haben musst, dass der User und das OS in zu vielen dynamischen Librarys erstickt.
zweiteres hat den Vorteil, dass es leichter ist einfach externe Teile des Codes (eben die Library) upzugraden, da du einfach nur die dynamische Library (dll,so)-Datei upgraden musst, solange du die ABI nicht änderst. Außerdem ermöglichst du es so, dass man Code teilt. So werden dynamische librarys idr. nur einmal in den Speicher geladen und von allen Anwendungen dann Zentral genutzt und die Binarys sind kleiner.
-
kingruedi schrieb:
nein.
statisch linken heisst, dass der Linker einfach deinen Code und den Code der Library zusammen in eine ausführbare Datei packt. Also statisch, so das die fest verdrahtet sind.
dynamisch linken heisst, dass der Linker nur in das Binary schreibt, welche Library benötigt wird und wenn du das Programm startest, schaut dein Betriebsystem nach der Library und lädt diese in den Speicher.
Also erstmal danke, aber jetzt habe ich noch ne Frage,
wie teile ich dem Linker beim compilieren mit, daß er die Library dynamisch
linken soll?Wie geht das z.b. mit gcc/g++?
ersteres ist besser, wenn man nicht davon ausgehen kann, dass die Library installiert ist bei dem User oder du wegen der schlechten dynamischen Link Implementierung deines Systems Angst haben musst, dass der User und das OS in zu vielen dynamischen Librarys erstickt.
zweiteres hat den Vorteil, dass es leichter ist einfach externe Teile des Codes (eben die Library) upzugraden, da du einfach nur die dynamische Library (dll,so)-Datei upgraden musst, solange du die ABI nicht änderst. Außerdem ermöglichst du es so, dass man Code teilt. So werden dynamische librarys idr. nur einmal in den Speicher geladen und von allen Anwendungen dann Zentral genutzt und die Binarys sind kleiner.
Wie ist das aber bei C++ Librarys, da ändert sich die ABI ja ständig, besonders unter Linux.
-
kingruedi schrieb:
So werden dynamische librarys idr. nur einmal in den Speicher geladen und von allen Anwendungen dann Zentral genutzt und die Binarys sind kleiner.
(Unter windows)
Ich dachte immer, das wäre nur bis erscheinung von win95 so gewesen. So weit ich
weiß sind bei den neuen Windowsversionen keine gemeinsame Nutzungen mehr vorhanden
und jedes Programm bekommt seine eigene Kopie in den Speicher geladen.
Jedenfalls meine ich, ich hätte das mal im Petzold gelesen.
-
Das hickhack hört jetzt zum Glück auf. Jetzt nutzen alle Programme das .Net Framework, anstatt einer dll.
Wenigstens sind die .exe Dateien schön klein.
-
SirLant schrieb:
kingruedi schrieb:
So werden dynamische librarys idr. nur einmal in den Speicher geladen und von allen Anwendungen dann Zentral genutzt und die Binarys sind kleiner.
(Unter windows)
Ich dachte immer, das wäre nur bis erscheinung von win95 so gewesen. So weit ich
weiß sind bei den neuen Windowsversionen keine gemeinsame Nutzungen mehr vorhanden
und jedes Programm bekommt seine eigene Kopie in den Speicher geladen.
Jedenfalls meine ich, ich hätte das mal im Petzold gelesen.Da hast Du was falsch verstanden. Jeder Prozess hat einen eigenen Prozessraum, das heisst aber nicht, dass nicht der gleiche Speicherbereich in mehrere Prozessräume eingeblendet werden kann. Und das ist auch kein Problem, da ausführbarer Code im allgemeinen schreibgeschützt ist.