0Pricing
C Academy · Lektion

Statische und Shared Libraries

Bibliotheken erstellen und linken

Statische und Shared Libraries ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was eine Bibliothek ist

Eine Bibliothek ist ein Paket kompilierter Objektdateien, das Sie in mehreren Programmen wiederverwenden können, ohne den Quellcode jedes Mal neu zu kompilieren.

In C gibt es zwei Arten:

  • Statische Bibliotheken (.a), die beim Linken in die ausführbare Datei kopiert werden
  • Gemeinsam genutzte Bibliotheken (.so), die zur Laufzeit geladen werden

Objektdateien erstellen

Beide Arten beginnen mit Objektdateien. Kompilieren Sie Ihre Quellen wie gewohnt mit -c.

Diese .o-Dateien sind das Ausgangsmaterial, das der Archivierer oder Linker zu einem Paket zusammenstellt.

gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.o

Eine statische Bibliothek erstellen

Der Archivierer ar fasst Objektdateien zu einem .a-Archiv zusammen. Der übliche Name lautet lib<name>.a.

Die Optionen bedeuten: r einfügen, c bei Bedarf erstellen, s einen Index schreiben.

ar rcs libmymath.a mathlib.o strlib.o

Eine statische Bibliothek linken

Verwenden Sie beim Linken -L für das Suchverzeichnis und -l für den Bibliotheksnamen. Lassen Sie dabei das Präfix lib und das Suffix .a weg.

Der benötigte Code wird in die ausführbare Datei kopiert, die anschließend eigenständig ausgeführt werden kann.

gcc main.c -L. -lmymath -o app

Vor- und Nachteile statischer Bibliotheken

Statisches Linken ist einfach und in sich abgeschlossen:

  • Die ausführbare Datei enthält alles und hat keine Laufzeitabhängigkeiten
  • Da jedes Programm eine eigene Kopie enthält, werden die Binärdateien größer
  • Um einen Fehler in einer Bibliothek zu beheben, müssen Sie jedes Programm, das sie verwendet, erneut linken

Positionsunabhängiger Code

Gemeinsam genutzte Bibliotheken können an jeder Speicheradresse geladen werden. Deshalb muss ihr Code positionsunabhängig sein. Kompilieren Sie mit -fPIC.

Dadurch wird Code erzeugt, der relative statt fest codierter Adressen verwendet.

gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.o

Eine gemeinsam genutzte Bibliothek erstellen

Erstellen Sie die .so-Datei mit -shared. Üblicherweise lautet der Name lib<name>.so.

Im Gegensatz zu einem statischen Archiv ist dies ein tatsächlich gelinktes Objekt, das der Loader zur Laufzeit in den Speicher abbilden kann.

gcc -shared mathlib.o strlib.o -o libmymath.so

Eine gemeinsam genutzte Bibliothek linken

Das Linken sieht genauso aus wie beim statischen Fall. Der Unterschied besteht darin, dass der Code nicht kopiert wird, sondern nur ein Verweis aufgezeichnet wird.

Die ausführbare Datei bleibt klein, ist nun aber darauf angewiesen, libmymath.so zur Laufzeit zu finden.

gcc main.c -L. -lmymath -o app

Die Bibliothek zur Laufzeit finden

Beim Start durchsucht der dynamische Loader die Standardpfade nach der .so-Datei. Eine Bibliothek im aktuellen Verzeichnis gehört nicht zu diesen Pfaden.

Weisen Sie den Loader für Testzwecke mit LD_LIBRARY_PATH (Linux) auf dieses Verzeichnis hin.

LD_LIBRARY_PATH=. ./app

Vor- und Nachteile gemeinsam genutzter Bibliotheken

Gemeinsam genutzte Bibliotheken tauschen Einfachheit gegen Flexibilität:

  • Eine Kopie im Speicher wird von mehreren Programmen gemeinsam genutzt, wodurch RAM und Festplattenspeicher gespart werden
  • Eine Fehlerbehebung in der .so-Datei kommt allen Programmen zugute, ohne dass diese erneut gelinkt werden müssen
  • Das Programm startet jedoch nicht, wenn die .so-Datei fehlt oder inkompatibel ist

Dieses letzte Risiko wird klassischerweise als „dependency hell“ bezeichnet.

Abhängigkeiten untersuchen

Mit zwei Werkzeugen können Sie sehen, gegen welche Bibliotheken eine Binärdatei gelinkt ist:

  • ldd app listet die gemeinsam genutzten Bibliotheken auf, die der Loader zur Laufzeit benötigt
  • nm libmymath.a listet die Symbole (Funktionen) innerhalb einer Bibliothek auf

Wenn ldd 'not found' anzeigt, kann der Loader die betreffende .so-Datei in seinen Suchpfaden nicht finden.

ldd app
nm libmymath.a

Kurze Überprüfung

Ordnen Sie die Option dem jeweiligen Ziel zu.

Zusammenfassung

Sie können jetzt beide Arten von Bibliotheken erstellen und linken:

  • Statisch: ar rcs libX.a *.o; der Code wird in die Binärdatei kopiert, die dadurch in sich abgeschlossen, aber größer ist
  • Gemeinsam genutzt: mit -fPIC kompilieren, mit -shared erstellen; der Code wird zur Laufzeit geladen
  • Beide werden mit -L und -l gelinkt; gemeinsam genutzte Bibliotheken benötigen einen Laufzeit-Suchpfad wie LD_LIBRARY_PATH

Damit verfügen Sie jetzt über die vollständige Toolchain vom Präprozessor bis zum Build.

Häufig gestellte Fragen

Ist die Lektion „Statische und Shared Libraries“ kostenlos?

Ja — der vollständige Text von „Statische und Shared Libraries“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Statische und Shared Libraries“?

Bibliotheken erstellen und linken Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C Academy zu starten?

Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Statische und Shared Libraries“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?

Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Bedingte Kompilierung
  2. Projekte mit mehreren Dateien
  3. Makefiles
  4. Statische und Shared Libraries
← Zurück zu C Academy