ar (archiver) aus den GNU Binutils erzeugt und verwaltet Archive — Dateien, die mehrere Objektdateien bündeln. Das bekannteste Einsatzgebiet sind statische Bibliotheken wie libfoo.a, die der Linker beim Bau eines Programms durchsucht.
Grundaufrufe
ar rcs libfoo.a foo.o bar.o # r=ersetzen/einfügen, c=anlegen, s=Symbolindex
ar t libfoo.a # Mitglieder auflisten
ar x libfoo.a foo.o # Mitglied extrahieren
ar d libfoo.a foo.o # Mitglied löschen
ar p libfoo.a foo.o # Mitglied auf stdout ausgeben
ar m libfoo.a foo.o # Mitglied im Archiv verschieben
Wichtige Optionen
r— Datei in das Archiv aufnehmen (ersetzt ein Mitglied mit gleichem Namen)c— Archiv still anlegen (unterdrückt die Warnung, wenn es neu ist)s— Symbolindex schreiben (wie ein ranlib-Aufruf)t— Inhaltsverzeichnis;x— extrahieren;d— löschen;q— schnell anhängen ohne DuplikatprüfungS— keinen Symbolindex erzeugen;u— nur neuere Dateien aufnehmena/b/i— nach/vor einem bestimmten Mitglied einfügen (Position steuern)--thin— Thin Archive: nur Verweise auf die Objektdateien statt Kopien (spart Platz im Build-Baum)
Wie der Linker Archive nutzt
Anders als Objektdateien zieht der Linker aus einem Archiv nur die Mitglieder, die gerade fehlende Symbole auflösen. Die Reihenfolge spielt dabei eine Rolle: Wer -lfoo nutzt, sollte die Bibliothek hinter den Objektdateien nennen, die ihre Funktionen brauchen. Enthält das Archiv keinen Symbolindex (zum Beispiel nach ar q ohne s), muss ranlib ihn nachtragen, sonst findet der Linker die Symbole nicht.
Praxis-Tipps
ar rcs libfoo.a *.obaut aus allen Objektdateien eines Verzeichnisses eine statische Bibliothek- Nach dem Linken ist eine statische Bibliothek nicht mehr nötig — das Programm trägt den Code bereits in sich
- Mit
ar t libfoo.aund nm-Befehle prüft man, welche Symbole ein Archiv wirklich anbietet - Diagnose: „archive has no index" beim Linken bedeutet, dass der Symbolindex fehlt —
ranlib libfoo.abehebt das
Verwandte Grundlagen: ranlib-Befehle (Index nachtragen), strip-Befehle (Archive verschlanken), Bibliothek.