ranlib erzeugt den Symbolindex einer Archivdatei — also einer statischen Bibliothek wie libfoo.a. Dieser Index verrät dem Linker, welches Mitglied welches Symbol definiert, sodass er beim Auflösen von Referenzen nicht das ganze Archiv durchsuchen muss.
Grundaufrufe
ranlib libfoo.a # Symbolindex erzeugen/aktualisieren
ranlib -t libfoo.a # nur aktualisieren, wenn der Index fehlt (touch)
ranlib -v libfoo.a # ausführliche Ausgabe
ranlib -D libfoo.a # deterministische Ausgabe (symmetrisch zum ar -D-Standard)
Zusammenspiel mit ar
- Das
s-Kommando von ar-Befehle (zum Beispielar rcs) schreibt denselben Index — wer immerrcsnutzt, braucht ranlib nicht extra aufzurufen - Nach
ar q(schnelles Anhängen) oderar d/ar mohneskann der Index fehlen oder veralten - Der Index entspricht der Ausgabe von
nm -s: Er listet die global definierten Symbole je Mitglied - GNU ar ruft ranlib intern auf; auf klassischen Systemen war ranlib ein eigenständiger Schritt nach jeder Archivänderung
Warum der Index wichtig ist
Beim Linken gegen eine statische Bibliothek prüft der Linker zuerst den Index und zieht nur die Mitglieder ein, die fehlende Symbole liefern. Fehlt der Index, meldet der Linker „archive has no index" oder findet Symbole nicht — besonders, wenn Mitglieder sich gegenseitig referenzieren. Ein ranlib libfoo.a nach jeder Änderung hält das Archiv benutzbar.
Praxis-Tipps
- Nach dem manuellen Umbau eines Archivs mit
ar d/ar mimmerranlibnachziehen - Wurde eine Bibliothek mit strip-Befehlen verschlankt, läuft ranlib direkt danach — so listet der Index nur noch die verbliebenen Symbole
ranlib -tist die sanfte Variante für Skripte: Es ändert nur veraltete oder fehlende Indizes- Deterministische Archive (
-D, seit ar/binutils Standard) erzeugen reproduzierbare Builds — gleiche Eingaben, bytegleiche Bibliothek - Die meisten Build-Systeme rufen ar und ranlib automatisch über die Werkzeuge-Variablen
ARundRANLIBauf
Verwandte Grundlagen: ar-Befehle (Archive bauen), nm-Befehle (Symbole anzeigen), Linker.