Houyhnhnm: Dynamische Bibliotheken fest einkompilieren?

Beitrag lesen

Hallo Martin

Korrekt. Der eigentliche Programmcode bleibt aber in der DLL, deshalb ist diese nachher für die Programmausführung notwendig. Denn der Linker erzeugt nur einen "stub" für jede Funktion in der DLL, quasi eine Art Referenz. Er kann nicht den tatsächlichen Programmcode aus der DLL nehmen und in das erzeugte Programm einbauen.

Das ist nicht richtig.

Auch wenn die Bibliothek als .dll vorliegt, braucht der Linker natürlich eine .lib, in der die Stubs für den Laufzeitlinker (der zur Laufzeit des Programmes dynamisch die .DLLs anbindet) enthalten sind. Dies ist der Fall der dynamischen Bindung.

Statische Bindung der Bibliothek bedeutet jedoch etwas anderes:

Der Hersteller der Bibliothek erzeugt einen .lib-File, in dem keine Stubs stehen, sondern vollständige Objektmodule mit dem (relokierbaren) Code der Bibliothek. Der Linker durchsucht dann, nachdem er die .obj-Module eingelesen hat, die Bibliothek nach Modulen, die Referenzen definieren, die noch nicht aufgelöst wurden und bindet dann den Modul komplett in das ausführbare Programm ein.

Der Vorteil dieser Methode gegenüber der einfachen Übernahme der Liste der Bibliotheks-Quellmodule in die Compilerparameter besteht darin, daß der Programmierer nicht erst mühsam herausfinden muß, welche Module der Bibliothek tatsächlich benötigt werden, um eine kompakte ausführbare Datei zu bekommen und daß die Übersetzungszeit für die Bibliothek - die bei umfangreichen Exemplaren leicht ein vielfaches der Übersetzungszeit für eine Anwendung erreicht - entfällt.

Gruß,

Houyhnhnm