ar - Referenzhandbuch, Optionen, Befehlsbeispiele


NAME

ar - Archive erstellen, ändern und extrahieren

ZUSAMMENFASSUNG

ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]

BESCHREIBUNG

Das GNU ar-Programm erstellt, verändert und extrahiert Archive. Ein Archiv ist eine einzelne Datei, die eine Sammlung anderer Dateien in einer Struktur enthält, die es ermöglicht, die ursprünglichen einzelnen Dateien (sogenannte Mitglieder des Archivs) abzurufen.

Inhalt, Modus (Berechtigungen), Zeitstempel, Besitzer und Gruppe der Originaldateien bleiben im Archiv erhalten und können beim Extrahieren wiederhergestellt werden.

GNU ar kann Archive verwalten, deren Mitglieder Namen beliebiger Länge haben; Abhängig davon, wie ar auf Ihrem System konfiguriert ist, kann jedoch eine Begrenzung der Länge des Mitgliedsnamens gelten, um die Kompatibilität mit Archivformaten zu gewährleisten, die mit anderen Tools verwaltet werden. Wenn es vorhanden ist, beträgt die Beschränkung häufig 15 Zeichen (typisch für Formate im Zusammenhang mit a.out) oder 16 Zeichen (typisch für Formate im Zusammenhang mit coff).

ar wird als binäres Dienstprogramm betrachtet, da Archive dieser Art am häufigsten als Bibliotheken verwendet werden, die häufig benötigte Unterroutinen enthalten. Da Bibliotheken oft von anderen Bibliotheken abhängen, kann ar auch die Abhängigkeiten einer Bibliothek aufzeichnen, wenn die Option --record-libdeps angegeben wird.

ar erstellt einen Index zu den Symbolen, die in verschiebbaren Objektmodulen im Archiv definiert sind, wenn Sie den Modifikator s angeben. Nach der Erstellung wird dieser Index im Archiv jedes Mal aktualisiert, wenn ar eine Änderung an seinem Inhalt vornimmt (mit Ausnahme des q-Aktualisierungsvorgangs). Ein Archiv mit einem solchen Index beschleunigt die Verknüpfung mit der Bibliothek und ermöglicht es Routinen in der Bibliothek, sich gegenseitig aufzurufen, unabhängig von ihrer Platzierung im Archiv.

Sie können nm -s oder nm --print-armap verwenden, um diese Indextabelle aufzulisten. Wenn einem Archiv die Tabelle fehlt, kann eine andere Form von ar namens ranlib verwendet werden, um nur die Tabelle hinzuzufügen.

GNU ar kann optional ein thin-Archiv erstellen, das einen Symbolindex und Verweise auf die Originalkopien der Mitgliedsdateien des Archivs enthält. Dies ist nützlich für die Erstellung von Bibliotheken zur Verwendung innerhalb eines lokalen Build-Baums, bei dem die verschiebbaren Objekte voraussichtlich verfügbar bleiben und das Kopieren des Inhalts jedes Objekts nur Zeit und Platz verschwenden würde.

Ein Archiv kann entweder dünn oder normal sein. Es kann nicht beides gleichzeitig sein. Sobald ein Archiv erstellt wurde, kann sein Format nicht mehr geändert werden, ohne es zuerst zu löschen und dann an seiner Stelle ein neues Archiv zu erstellen.

Thin-Archive werden außerdem komprimiert, sodass beim Hinzufügen eines Thin-Archivs zu einem anderen Thin-Archiv dieses nicht verschachtelt wird, wie dies bei einem normalen Archiv der Fall wäre. Stattdessen werden die Elemente des ersten Archivs einzeln zum zweiten Archiv hinzugefügt.

Die Pfade zu den Elementen des Archivs werden relativ zum Archiv selbst gespeichert.

GNU ar ist so konzipiert, dass es mit zwei verschiedenen Einrichtungen kompatibel ist. Sie können seine Aktivität mithilfe von Befehlszeilenoptionen steuern, wie z. B. den verschiedenen Varianten von ar auf Unix-Systemen; Wenn Sie jedoch die einzelne Befehlszeilenoption -M angeben, können Sie sie mit einem über die Standardeingabe bereitgestellten Skript steuern, z. B. dem MRI-Bibliothekarprogramm.

OPTIONEN

Mit GNU ar können Sie den Operationscode p und die Modifikatorflags mod in beliebiger Reihenfolge innerhalb des ersten Befehlszeilenarguments mischen.

Wenn Sie möchten, können Sie das erste Befehlszeilenargument mit einem Bindestrich beginnen.

Der Schlüsselbuchstabe p gibt an, welche Operation ausgeführt werden soll; Es kann einer der folgenden sein, Sie dürfen jedoch nur einen davon angeben:

  1. Löschen Module aus dem Archiv. Geben Sie die Namen der zu löschenden Module als member... an; Das Archiv bleibt unberührt, wenn Sie keine zu löschenden Dateien angeben. Wenn Sie den Modifikator v angeben, listet ar jedes Modul auf, sobald es gelöscht wird.

  2. Verwenden Sie diesen Vorgang, um Mitglieder in einem Archiv zu verschieben. Die Reihenfolge der Mitglieder in einem Archiv kann einen Unterschied darin machen, wie Programme mithilfe der Bibliothek verknüpft werden, wenn ein Symbol in mehr als einem Mitglied definiert ist. Wenn mit m keine Modifikatoren verwendet werden, werden alle Mitglieder, die Sie in den member-Argumenten benennen, an das Ende des Archivs verschoben; Sie können stattdessen die Modifikatoren a, b oder i verwenden, um sie an eine bestimmte Stelle zu verschieben.

  3. Drucken die angegebenen Mitglieder des Archivs in die Standardausgabedatei. Wenn der Modifikator v angegeben ist, wird der Mitgliedsname angezeigt, bevor der Inhalt in die Standardausgabe kopiert wird. Wenn Sie keine member-Argumente angeben, werden alle Dateien im Archiv gedruckt.

  4. Schnelles Anhängen; In der Vergangenheit wurden die Dateien member... am Ende von archive hinzugefügt, ohne nach Ersatz zu suchen. Die Modifikatoren a, b und i haben keinen Einfluss auf diesen Vorgang; Neue Mitglieder werden immer am Ende des Archivs platziert. Der Modifikator v bewirkt, dass ar jede Datei beim Anhängen auflistet. Da es bei diesem Vorgang auf die Geschwindigkeit ankommt, haben Implementierungen von ar die Option, die Symboltabelle des Archivs, falls vorhanden, nicht zu aktualisieren. Zu viele verschiedene Systeme gehen jedoch davon aus, dass Symboltabellen immer auf dem neuesten Stand sind, sodass GNU ar die Tabelle auch bei einem schnellen Anhängen neu erstellt. Hinweis – GNU ar behandelt den Befehl qs als Synonym für r – wodurch bereits vorhandene Dateien im Archiv ersetzt und am Ende neue angehängt werden.

  5. Fügen Sie die Dateien member... in das Archiv ein (mit Ersatz). Dieser Vorgang unterscheidet sich von q darin, dass alle zuvor vorhandenen Mitglieder gelöscht werden, wenn ihre Namen mit den hinzugefügten Namen übereinstimmen. Wenn eine der in member... genannten Dateien nicht existiert, zeigt ar eine Fehlermeldung an und lässt alle vorhandenen Mitglieder des Archivs, die diesem Namen entsprechen, unberührt. Standardmäßig werden neue Mitglieder am Ende der Datei hinzugefügt. Sie können jedoch einen der Modifikatoren a, b oder i verwenden, um eine Platzierung relativ zu einem vorhandenen Mitglied anzufordern. Der mit dieser Operation verwendete Modifikator v löst eine Ausgabezeile für jede eingefügte Datei aus, zusammen mit einem der Buchstaben a oder r, um anzugeben, ob Die Datei wurde angehängt (kein altes Mitglied gelöscht) oder ersetzt.

  6. Fügen Sie dem Archiv einen Index hinzu oder aktualisieren Sie ihn, falls er bereits vorhanden ist. Beachten Sie, dass dieser Befehl eine Ausnahme von der Regel darstellt, dass es nur einen Befehlsbuchstaben geben darf, da er entweder als Befehl oder als Modifikator verwendet werden kann. In beiden Fällen geschieht das Gleiche.

  7. Zeigt eine Tabelle an, die den Inhalt von Archive oder die der in Mitglied... aufgeführten Dateien auflistet, die im Archiv vorhanden sind. Normalerweise wird nur der Mitgliedsname angezeigt, aber wenn der Modifikator O angegeben ist, wird auch der entsprechende Offset des Mitglieds angezeigt. Um schließlich die Modi (Berechtigungen), den Zeitstempel, den Eigentümer, die Gruppe und die Größe anzuzeigen, sollte der Modifikator v eingefügt werden. Wenn Sie kein Mitglied angeben, werden alle Dateien im Archiv aufgelistet. Wenn es mehr als eine Datei mit demselben Namen (z. B. fie) in einem Archiv (z. B. b.a) gibt, wird ar t b.a fie aufgelistet nur die erste Instanz; Um sie alle zu sehen, müssen Sie eine vollständige Auflistung anfordern – in unserem Beispiel ar t b.a.

  8. Extrahieren Mitglieder (mit dem Namen member) aus dem Archiv. Sie können bei diesem Vorgang den Modifikator v verwenden, um anzufordern, dass ar jeden Namen beim Extrahieren auflistet. Wenn Sie kein Mitglied angeben, werden alle Dateien im Archiv extrahiert. Dateien können nicht aus einem Thin-Archiv extrahiert werden, und es gibt Einschränkungen beim Extrahieren aus Archiven, die mit P erstellt wurden: Die Pfade dürfen nicht absolut sein, dürfen keine .. und keine enthalten Unterverzeichnisse in den Pfaden müssen vorhanden sein. Wenn diese Einschränkungen vermieden werden sollen, verwenden Sie die Option --output, um ein Ausgabeverzeichnis anzugeben.

Eine Reihe von Modifikatoren (mod) können unmittelbar auf den Schlüsselbuchstaben p folgen, um Variationen des Verhaltens einer Operation anzugeben:

  1. Fügen Sie neue Dateien nach einem vorhandenen Mitglied des Archivs hinzu. Wenn Sie den Modifikator a verwenden, muss der Name eines vorhandenen Archivmitglieds als Argument relpos vor der Spezifikation archive vorhanden sein.

  2. Fügen Sie neue Dateien vor einem vorhandenen Mitglied des Archivs hinzu. Wenn Sie den Modifikator b verwenden, muss der Name eines vorhandenen Archivmitglieds als Argument relpos vor der Spezifikation archive vorhanden sein. (dasselbe wie i).

  3. Erstellen das Archiv. Das angegebene Archiv wird immer erstellt, wenn es nicht vorhanden ist, wenn Sie ein Update anfordern. Es wird jedoch eine Warnung ausgegeben, es sei denn, Sie geben im Voraus mit diesem Modifikator an, dass Sie eine Warnung erstellen möchten.

  1. Arbeiten Sie im deterministischen Modus. Verwenden Sie beim Hinzufügen von Dateien und dem Archivindex Null für UIDs, GIDs und Zeitstempel und verwenden Sie konsistente Dateimodi für alle Dateien. Wenn diese Option verwendet wird und ar mit identischen Optionen und identischen Eingabedateien verwendet wird, werden bei mehreren Durchläufen identische Ausgabedateien erstellt, unabhängig von den Eigentümern, Gruppen, Dateimodi oder Änderungszeiten der Eingabedateien. Wenn binutils mit --enable-deterministic-archives konfiguriert wurde, ist dieser Modus standardmäßig aktiviert. Es kann mit dem Modifikator U unten deaktiviert werden.

  1. Namen im Archiv kürzen. GNU ar erlaubt normalerweise Dateinamen beliebiger Länge. Dies führt dazu, dass auf einigen Systemen Archive erstellt werden, die nicht mit dem nativen Programm ar kompatibel sind. Wenn dies ein Problem darstellt, kann der Modifikator f verwendet werden, um Dateinamen beim Einfügen in das Archiv zu kürzen.

  1. Fügen Sie neue Dateien vor einem vorhandenen Mitglied des Archivs ein. Wenn Sie den Modifikator i verwenden, muss der Name eines vorhandenen Archivmitglieds als Argument relpos vor der Spezifikation archive vorhanden sein. (dasselbe wie b).

  1. Geben Sie Abhängigkeiten dieser Bibliothek an. Die Abhängigkeiten müssen diesem Optionszeichen unmittelbar folgen, dieselbe Syntax wie die Linker-Befehlszeile verwenden und innerhalb eines einzelnen Arguments angegeben werden. Wenn also mehrere Elemente benötigt werden, müssen diese in Anführungszeichen gesetzt werden, um ein einziges Befehlszeilenargument zu bilden. Zum Beispiel L -L/usr/local/lib -lmydep1 -lmydep2

  1. Verwendet den Parameter count. Dies wird verwendet, wenn im Archiv mehrere Einträge mit demselben Namen vorhanden sind. Instanz count des angegebenen Namens aus dem Archiv extrahieren oder löschen.

  1. Behalten Sie beim Extrahieren die ursprünglichen Daten der Mitglieder bei. Wenn Sie diesen Modifikator nicht angeben, werden aus dem Archiv extrahierte Dateien mit dem Zeitpunkt der Extraktion versehen.

  1. Mitgliederoffsets innerhalb des Archivs anzeigen. Zusammen mit der Option t verwenden.

  2. Verwenden Sie den vollständigen Pfadnamen, wenn Sie Namen im Archiv abgleichen oder speichern. Mit vollständigen Pfadnamen erstellte Archive sind nicht POSIX-kompatibel und funktionieren daher möglicherweise nicht mit anderen Tools als den aktuellen GNU-Tools. Wenn Sie solche Archive mit GNU ar ändern, ohne P zu verwenden, werden die vollständigen Pfadnamen entfernt, es sei denn, das Archiv ist ein Thin-Archiv. Beachten Sie, dass P beim Hinzufügen von Dateien zu einem dünnen Archiv nützlich sein kann, da r ohne P den Pfad ignoriert, wenn ausgewählt wird, welches Element ersetzt werden soll. Daher führt ar rcST archive.a subdir/file1 subdir/file2 file1 dazu, dass das erste subdir/file1 durch file1 aus dem aktuellen Verzeichnis ersetzt wird. Durch das Hinzufügen von P wird dieser Ersatz verhindert.

  1. Schreiben Sie einen Objektdateiindex in das Archiv oder aktualisieren Sie einen vorhandenen, auch wenn keine weiteren Änderungen am Archiv vorgenommen werden. Sie können dieses Modifikatorflag entweder mit jeder Operation oder allein verwenden. Das Ausführen von ar s auf einem Archiv entspricht dem Ausführen von ranlib darauf.

  1. Erzeugen Sie keine Archivsymboltabelle. Dies kann den Aufbau einer großen Bibliothek in mehreren Schritten beschleunigen. Das resultierende Archiv kann nicht mit dem Linker verwendet werden. Um eine Symboltabelle zu erstellen, müssen Sie den Modifikator S bei der letzten Ausführung von ar weglassen oder ranlib für das Archiv ausführen .

  2. Veralteter Alias für --thin. T wird nicht empfohlen, da T in vielen AR-Implementierungen eine andere Bedeutung hat, wie durch die X/Open System-Schnittstelle angegeben.

  1. Normalerweise fügt ar r... alle aufgelisteten Dateien in das Archiv ein. Wenn Sie nur diejenigen der von Ihnen aufgelisteten Dateien einfügen möchten, die neuer als vorhandene Mitglieder mit demselben Namen sind, verwenden Sie diesen Modifikator. Der Modifikator u ist nur für die Operation r (replace) zulässig. Insbesondere ist die Kombination qu nicht erlaubt, da durch die Überprüfung der Zeitstempel jeglicher Geschwindigkeitsvorteil durch die Operation q verloren gehen würde.

  1. Arbeiten Sie nicht im deterministischen Modus. Dies ist die Umkehrung des Modifikators D oben: Hinzugefügte Dateien und der Archivindex erhalten ihre tatsächlichen UID-, GID-, Zeitstempel- und Dateimoduswerte. Dies ist die Standardeinstellung, es sei denn, binutils wurde mit --enable-deterministic-archives konfiguriert.

  1. Dieser Modifikator fordert die ausführliche Version einer Operation an. Bei vielen Vorgängen werden zusätzliche Informationen angezeigt, beispielsweise verarbeitete Dateinamen, wenn der Modifikator v angehängt wird.

  1. Dieser Modifikator zeigt die Versionsnummer von ar.

Das Programm ar unterstützt auch einige Befehlszeilenoptionen, die weder Modifikatoren noch Aktionen sind, aber das Verhalten auf bestimmte Weise ändern:

--help

Zeigt die Liste der von ar unterstützten Befehlszeilenoptionen an und wird dann beendet.

--version

Zeigt die Versionsinformationen von ar an und wird dann beendet.

-X32_64

ar ignoriert aus Kompatibilitätsgründen mit AIX eine Anfangsoption namens -X32_64. Das durch diese Option erzeugte Verhalten ist die Standardeinstellung für GNU ar. ar unterstützt keine der anderen -X-Optionen; Insbesondere wird -X32 nicht unterstützt, was die Standardeinstellung für AIX ar ist.

--plugin name

Der optionale Befehlszeilenschalter --plugin name veranlasst ar, das Plugin namens name zu laden, das Unterstützung für hinzufügt Weitere Dateiformate, einschließlich Objektdateien mit Informationen zur Linkzeitoptimierung. Diese Option ist nur verfügbar, wenn die Toolchain mit aktivierter Plugin-Unterstützung erstellt wurde. Wenn --plugin nicht bereitgestellt wird, aber die Plugin-Unterstützung aktiviert wurde, durchläuft ar die Dateien in $ {libdir}/bfd-plugins in alphabetischer Reihenfolge und das erste Plugin, das das betreffende Objekt beansprucht, wird verwendet. Bitte beachten Sie, dass dieses Plugin-Suchverzeichnis nicht dasjenige ist, das von der -plugin-Option von ld verwendet wird. Damit ar das Linker-Plugin verwenden kann, muss es in das Verzeichnis $ {libdir}/bfd-plugins kopiert werden. Für GCC-basierte Kompilierungen heißt das Linker-Plugin liblto_plugin.so.0.0.0. Für Clang-basierte Kompilierungen heißt es LLVMgold.so. Das GCC-Plugin ist immer abwärtskompatibel zu früheren Versionen, es reicht also aus, einfach die neueste Version zu kopieren.

--target target

Der optionale Befehlszeilenschalter --target bfdname gibt an, dass die Archivmitglieder in einem Objektcodeformat vorliegen, das sich vom Standardformat Ihres Systems unterscheidet. Sehen

--output dirname

Mit der Option --output kann ein Pfad zu einem Verzeichnis angegeben werden, in das Archivmitglieder extrahiert werden sollen. Wenn diese Option nicht angegeben ist, wird das aktuelle Verzeichnis verwendet. Hinweis: Obwohl das Vorhandensein dieser Option einen x-Extraktionsvorgang impliziert, muss diese Option dennoch in der Befehlszeile enthalten sein.

--record-libdeps libdeps

Die Option --record-libdeps ist identisch mit dem Modifikator l, wird jedoch in Langform behandelt.

--thin

Machen Sie das angegebene Archiv zu einem dünnen Archiv. Wenn es bereits existiert und ein reguläres Archiv ist, müssen die vorhandenen Mitglieder im selben Verzeichnis wie archive vorhanden sein.

  1. Befehlszeilenoptionen aus Datei lesen. Die gelesenen Optionen werden anstelle der ursprünglichen Option @file eingefügt. Wenn file nicht existiert oder nicht gelesen werden kann, wird die Option wörtlich behandelt und nicht entfernt. Optionen in file werden durch Leerzeichen getrennt. Ein Leerzeichen kann in eine Option eingefügt werden, indem die gesamte Option in einfache oder doppelte Anführungszeichen gesetzt wird. Jedes Zeichen (einschließlich eines Backslashs) kann eingefügt werden, indem dem einzufügenden Zeichen ein Backslash vorangestellt wird. Die Datei kann selbst zusätzliche @Datei-Optionen enthalten; Alle derartigen Optionen werden rekursiv verarbeitet.

SIEHE AUCH

nm (1), ranlib (1), and the Info entries for binutils.

URHEBERRECHTE ©

Copyright (c) 1991-2023 Free Software Foundation, Inc.

Es wird die Erlaubnis erteilt, dieses Dokument gemäß den Bedingungen der GNU Free Documentation License, Version 1.3 oder einer späteren, von der Free Software Foundation veröffentlichten Version zu kopieren, zu verbreiten und/oder zu ändern. ohne invariante Abschnitte, ohne Texte auf der Vorderseite und ohne Texte auf der Rückseite. Eine Kopie der Lizenz ist im Abschnitt mit der Überschrift „GNU Free Documentation License“ enthalten.