Kann mir mal jemand sagen, was der Unterschied zwischen static und monolitihic ist ? Bzw.: Was ist eine Monolithic-Lib ?
Der Begriff monolithisch (aus dem griechischen, bedeutet so viel wie
"ein Stein" oder "aus einem Stück") wird i.d.R. im Zusammenhang mit dem
Erstellen von Programmen verwendet, die auf Plattformen laufen sollen,
die das Konzept dynamische Libraries ("DLL") kennen, wie u.a. Windows.
Ein monolitisches Programm wird mit "statischen" Libraries gelinkt und
enthält dadurch möglichst wenige Abhängigkeiten von dynamischen
Libraries.
Das Gegenstück dazu ist ein "dynamisch gelinktes" Programm, das
verwendet anstelle von "statischen" Libraries sogenannte
Importlibraries, die nur Funktionsrümpfe enthälten und dafür sorgen, daß
der tatsächliche Code zur Laufzeit aus einer dynamischen Library
hinzugeladen wird.
Damit wird klar, daß das monolithische Programm auch bei fehlenden oder
inkompatiblen dynamischen Libraries auf dem System funktioniert, während
ein dynamisch gelinktes Programm vom Vorhandensein aller benötigten DLLs
in der korrekten Version abhängig ist.
Für die Programmierung von Microcontrollern ist diese Unterscheidung
nicht relevant, da auf diesen das Konzept der dynamischen library nicht
verwendet wird.
Libraries, die im Zusammenhang mit der Microcontrollerprogrammierung
verwendet werden, sind immer "statische" Libraries.
Hier kann man noch anhand der Art des Aufbaus der Library
Unterscheidungen treffen. Wenn jede Funktion, die in einer Library
enthalten ist, beim Erstellen der Library in einem eigenen Sourcefile
untergebracht war, enthält die Library also für jede der Funktionen
einen eigenen Objektcodeabschnitt. Sind mehrere Funktionen in einem
Sourcefile zusammengefasst, landen diese auch in der Library in einem
gemeinsamen Objektcodeabschnitt.
Das ist beim Linken relevant; der Linker extrahiert aus der Library alle
benötigten Objektcodeabschnitte und fügt diese zusammen. Der
resultierende Programmcode wird kleiner, wenn die Library aus vielen
kleinen Objektcodeabschnitten besteht, als wenn sie aus wenigen größeren
zusammengesetzt ist.
Eine Library, die aus einem oder sehr wenigen großen
Objektcodeabschnitten zusammengesetzt ist, könnte man in diesem Kontext
als "monolithisch" bezeichnen.
Wobei die geschilderten Probleme bei neueren Linkern abgeschwächt
werden, da diese auf Funktionsebene linken können, also unterhalb der
Objektcodeabschnittebene.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.