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.oEine 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.oEine 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 appVor- 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.oEine 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.soEine 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 appDie 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=. ./appVor- 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 applistet die gemeinsam genutzten Bibliotheken auf, die der Loader zur Laufzeit benötigtnm libmymath.alistet 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.aKurze Ü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
-fPICkompilieren, mit-sharederstellen; der Code wird zur Laufzeit geladen - Beide werden mit
-Lund-lgelinkt; gemeinsam genutzte Bibliotheken benötigen einen Laufzeit-Suchpfad wieLD_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
- Bedingte Kompilierung
- Projekte mit mehreren Dateien
- Makefiles
- Statische und Shared Libraries