Forum: PC-Programmierung Libraryunterschiede


von Karlheinz D. (kdruschel)


Lesenswert?

Kann mir mal jemand sagen, was der Unterschied zwischen static und 
monolitihic ist ? Bzw.: Was ist eine Monolithic-Lib ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.