mikrocontroller.net

Forum: PC-Programmierung Libraryunterschiede


Autor: Karlheinz Druschel (kdruschel)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.