Endlich habe ich mal "Namen" für die Verfahren.Socke hat geschrieben: Mi 18. Sep 2024, 10:39 Damit ein vollständiges Bild herrscht:
- Beim statischen Linken werden die Bibliotheken durch den Linker direkt in das Executable eingebunden. Ein Nachladen zur Laufzeit ist nicht notwendig - das passiert mit allen im Programm verwendeten Free Pascal Units.
- Beim dynamischen Linken unterscheidet man zwischen early binding und late binding
- Beim early binding wird dem Compiler/Linker mitgegeben, welche Bibliothek und welche Funktionen daraus genutzt werden. Diese Informationen werden in die Programmdatei geschrieben, sodass der Betriebssytemlinker beim Programmstart (bevor der Code darin ausgeführt wird) die Bibliotheken suchen und nachladen kann. Warf hat das Verfahren gut beschrieben/zitiert. Über den beschriebenen Mechanismus kann man gut kontrollieren, welche Programme welche Bibliotheken finden. Wird die Umgebungsvariable LD_LIBRARY_PATH in einem Shell Script vor Programmstart gesetzt wird, gilt sie auch nur dort und nicht für das ganze System.
- Beim late binding gibt das Programm zur Laufzeit dem Betriebssystem mit, welche Bibliotheken geladen werden soll. Da das Programm selbst die Anweisungen dazu gibt, muss das early binding bereits abgeschlossen sein und das Program läuft bereits. Die Funktionen dazu sind LoadLibrary() und GetProcedureAddress(). Dieses Verfahren erlaubt ein granulares Fehlerhandling durch den Programmierer (andere Orte/Bibliotheken/Versionen der selben Bibliothek suchen/ausprobieren), ist in der Programmierung aber deutlich aufwändiger. Es bietet sich daher bei optionalen Bibliotheken oder Plugins an.
Danke. Wieder was dazu gelernt