ar - creare, modificare ed estrarre dagli archivi
ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]
Il programma GNU ar crea, modifica ed estrae dagli archivi. Un archivio è un singolo file che contiene una raccolta di altri file in una struttura che consente di recuperare i singoli file originali (chiamati membri dell'archivio).
Il contenuto, la modalità (autorizzazioni), il timestamp, il proprietario e il gruppo dei file originali vengono conservati nell'archivio e possono essere ripristinati all'estrazione.
GNU ar può mantenere archivi i cui membri hanno nomi di qualsiasi lunghezza; tuttavia, a seconda di come ar è configurato sul tuo sistema, potrebbe essere imposto un limite alla lunghezza del nome del membro per compatibilità con i formati di archivio mantenuti con altri strumenti. Se esiste, il limite è spesso di 15 caratteri (tipico dei formati relativi a a.out) o 16 caratteri (tipico dei formati relativi a coff).
ar è considerata un'utilità binaria perché gli archivi di questo tipo sono spesso usati come librerie che contengono subroutine comunemente necessarie. Poiché le librerie spesso dipendono da altre librerie, ar può anche registrare le dipendenze di una libreria quando viene specificata l'opzione --record-libdeps.
ar crea un indice dei simboli definiti nei moduli oggetto rilocabili nell'archivio quando specifichi il modificatore s. Una volta creato, questo indice viene aggiornato nell'archivio ogni volta che ar apporta una modifica al suo contenuto (salvo per l'operazione di aggiornamento q). Un archivio con un tale indice accelera il collegamento alla libreria e consente alle routine nella libreria di richiamarsi a vicenda indipendentemente dalla loro collocazione nell'archivio.
Puoi utilizzare nm -s o nm --print-armap per elencare questa tabella di indice. Se in un archivio manca la tabella, è possibile utilizzare un'altra forma di ar chiamata ranlib per aggiungere solo la tabella.
GNU ar può facoltativamente creare un archivio thin, che contiene un indice di simboli e riferimenti alle copie originali dei file membri dell'archivio. Ciò è utile per la creazione di librerie da utilizzare all'interno di un albero di compilazione locale, in cui gli oggetti rilocabili dovrebbero rimanere disponibili e la copia del contenuto di ciascun oggetto farebbe solo perdere tempo e spazio.
Un archivio può essere scarso o può essere normale. Non possono essere entrambi allo stesso tempo. Una volta che un archivio è stato creato, il suo formato non può essere cambiato senza prima cancellarlo e poi creare un nuovo archivio al suo posto.
Anche gli archivi thin vengono appiattiti, in modo che l'aggiunta di un archivio thin a un altro archivio thin non ne annidi, come accadrebbe con un archivio normale. Invece gli elementi del primo archivio vengono aggiunti singolarmente al secondo archivio.
I percorsi degli elementi dell'archivio sono memorizzati relativamente all'archivio stesso.
GNU ar è progettato per essere compatibile con due diverse strutture. Puoi controllarne l'attività utilizzando le opzioni della riga di comando, come le diverse varietà di ar sui sistemi Unix; oppure, se specifichi l'unica opzione della riga di comando -M, puoi controllarla con uno script fornito tramite input standard, come il programma bibliotecario MRI.
GNU ar consente di combinare il codice operativo p e i flag di modifica mod in qualsiasi ordine, all'interno del primo argomento della riga di comando.
Se lo desideri, puoi iniziare il primo argomento della riga di comando con un trattino.
La lettera chiave p specifica quale operazione eseguire; può essere uno dei seguenti, ma è necessario specificarne solo uno:
Elimina i moduli dall'archivio. Specifica i nomi dei moduli da eliminare come member...; l'archivio non viene modificato se non si specificano file da eliminare. Se specifichi il modificatore v, ar elenca ogni modulo man mano che viene eliminato.
Utilizza questa operazione per spostare i membri in un archivio. L'ordinamento dei membri in un archivio può fare la differenza nel modo in cui i programmi sono collegati utilizzando la libreria, se un simbolo è definito in più di un membro. Se non vengono usati modificatori con m, tutti i membri nominati negli argomenti member vengono spostati alla fine dell'archivio; puoi utilizzare i modificatori a, b o i per spostarli in una posizione specificata.
Stampa i membri specificati dell'archivio nel file di output standard. Se viene specificato il modificatore v, mostra il nome del membro prima di copiarne il contenuto nell'output standard. Se non specifichi argomenti member, vengono stampati tutti i file nell'archivio.
Aggiunta rapida; Storicamente, aggiungi i file member... alla fine di archive, senza verificare la sostituzione. I modificatori a, b e i non influenzano questa operazione; i nuovi membri sono sempre posizionati alla fine dell'archivio. Il modificatore v fa in modo che ar elenchi ogni file man mano che viene aggiunto. Poiché lo scopo di questa operazione è la velocità, le implementazioni di ar hanno la possibilità di non aggiornare la tabella dei simboli dell'archivio, se ne esiste una. Tuttavia, troppi sistemi diversi presuppongono che le tabelle dei simboli siano sempre aggiornate, quindi GNU ar ricostruirà la tabella anche con una rapida aggiunta. Nota - GNU ar tratta il comando qs come sinonimo di r - sostituendo i file già esistenti nell'archivio e aggiungendone di nuovi alla fine.
Inserisci i file member... in archive (con sostituzione). Questa operazione differisce da q in quanto tutti i membri esistenti in precedenza vengono eliminati se i loro nomi corrispondono a quelli aggiunti. Se uno dei file denominati in member... non esiste, ar visualizza un messaggio di errore e lascia indisturbati tutti i membri esistenti dell'archivio che corrispondono a quel nome. Per impostazione predefinita, i nuovi membri vengono aggiunti alla fine del file; ma puoi utilizzare uno dei modificatori a, b o i per richiedere il posizionamento relativo a qualche membro esistente. Il modificatore v utilizzato con questa operazione genera una riga di output per ogni file inserito, insieme a una delle lettere a o r per indicare se il file è stato aggiunto (nessun vecchio membro eliminato) o sostituito.
Aggiungi un indice all'archivio o aggiornalo se esiste già. Nota che questo comando è un'eccezione alla regola secondo cui può esserci solo una lettera di comando, poiché è possibile usarla come comando o come modificatore. In entrambi i casi fa la stessa cosa.
Visualizza una tabella che elenca i contenuti di archive, o quelli dei file elencati in member... che sono presenti nell'archivio. Normalmente viene visualizzato solo il nome del membro, ma se viene specificato il modificatore O, viene visualizzato anche l'offset corrispondente del membro. Infine, per vedere le modalità (autorizzazioni), il timestamp, il proprietario, il gruppo e la dimensione dovrebbe essere incluso il modificatore v. Se non specifichi un membro, vengono elencati tutti i file nell'archivio. Se c'è più di un file con lo stesso nome (diciamo, fie) in un archivio (diciamo b.a), ar t b.a fie elenca solo la prima istanza; per vederli tutti, devi chiedere un elenco completo --- nel nostro esempio, ar t b.a.
Estrai i membri (denominati membro) dall'archivio. Puoi utilizzare il modificatore v con questa operazione, per richiedere che ar elenchi ogni nome man mano che lo estrae. Se non specifichi un membro, vengono estratti tutti i file nell'archivio. I file non possono essere estratti da un archivio sottile e ci sono restrizioni sull'estrazione da archivi creati con P: i percorsi non devono essere assoluti, non possono contenere .. e qualsiasi devono esistere sottodirectory nei percorsi. Se si desidera evitare queste restrizioni, utilizzare l'opzione --output per specificare una directory di output.
Un numero di modificatori (mod) può seguire immediatamente la lettera chiave p, per specificare variazioni sul comportamento di un'operazione:
Aggiungi nuovi file dopo un membro esistente dell'archivio. Se utilizzi il modificatore a, il nome di un membro dell'archivio esistente deve essere presente come argomento relpos, prima della specifica archive.
Aggiungi nuovi file prima di un membro esistente dell'archivio. Se utilizzi il modificatore b, il nome di un membro dell'archivio esistente deve essere presente come argomento relpos, prima della specifica archive. (uguale a i).
Crea l'archivio. L'archivio specificato viene sempre creato se non esisteva quando richiedi un aggiornamento. Ma viene emesso un avviso a meno che non si specifichi in anticipo che si prevede di crearlo, utilizzando questo modificatore.
Opera in modalità deterministica. Quando si aggiungono file e l'indice dell'archivio, utilizzare zero per UID, GID, timestamp e utilizzare modalità file coerenti per tutti i file. Quando viene utilizzata questa opzione, se ar viene utilizzato con opzioni identiche e file di input identici, più esecuzioni creeranno file di output identici indipendentemente dai proprietari, dai gruppi, dalle modalità file o dai tempi di modifica dei file di input. Se binutils è stato configurato con --enable-deterministic-archives, questa modalità è attiva per impostazione predefinita. Può essere disabilitato con il modificatore U, di seguito.
Tronca i nomi nell'archivio. GNU ar normalmente consente nomi di file di qualsiasi lunghezza. Ciò causerà la creazione di archivi che non sono compatibili con il programma nativo ar su alcuni sistemi. Se questo è un problema, il modificatore f può essere utilizzato per troncare i nomi dei file quando li si inserisce nell'archivio.
Inserisci nuovi file prima di un membro esistente dell'archivio. Se utilizzi il modificatore i, il nome di un membro dell'archivio esistente deve essere presente come argomento relpos, prima della specifica archive. (uguale a b).
Specifica le dipendenze di questa libreria. Le dipendenze devono seguire immediatamente questo carattere di opzione, devono utilizzare la stessa sintassi della riga di comando del linker e devono essere specificate all'interno di un singolo argomento. Cioè, se sono necessari più elementi, devono essere quotati per formare un singolo argomento della riga di comando. Ad esempio L -L/usr/local/lib -lmydep1 -lmydep2
Utilizza il parametro count. Viene utilizzato se nell'archivio sono presenti più voci con lo stesso nome. Estrai o elimina il count dell'istanza del nome specificato dall'archivio.
Conserva le date originali dei membri durante l'estrazione. Se non si specifica questo modificatore, i file estratti dall'archivio vengono contrassegnati con l'ora dell'estrazione.
Visualizza gli offset delle aste all'interno dell'archivio. Utilizzare insieme all'opzione t.
Utilizzare il nome del percorso completo per la corrispondenza o l'archiviazione dei nomi nell'archivio. Gli archivi creati con nomi di percorso completi non sono conformi a POSIX e quindi potrebbero non funzionare con strumenti diversi dagli strumenti GNU aggiornati. La modifica di tali archivi con GNU ar senza utilizzare P rimuoverà i nomi di percorso completi a meno che l'archivio non sia un archivio sottile. Si noti che P può essere utile quando si aggiungono file a un archivio sottile poiché r senza P ignora il percorso quando si sceglie quale elemento sostituire. Quindi ar rcST archive.a subdir/file1 subdir/file2 file1 comporterà la sostituzione del primo subdir/file1 con file1 dalla directory corrente. L'aggiunta di P impedirà questa sostituzione.
Scrivere un indice di file oggetto nell'archivio o aggiornarne uno esistente, anche se non vengono apportate altre modifiche all'archivio. È possibile utilizzare questo flag modificatore con qualsiasi operazione o da solo. Eseguire ar s su un archivio equivale a eseguire ranlib su di esso.
Non generare una tabella dei simboli di archivio. Questo può velocizzare la costruzione di una grande biblioteca in diversi passaggi. L'archivio risultante non può essere utilizzato con il linker. Per costruire una tabella dei simboli, devi omettere il modificatore S sull'ultima esecuzione di ar, oppure devi eseguire ranlib sull'archivio .
Alias deprecato per --thin. T non è raccomandato perché in molte implementazioni ar T ha un significato diverso, come specificato da X/Open System Interface.
Normalmente, ar r... inserisce tutti i file elencati nell'archivio. Se desideri inserire solo tra i file che elenchi che sono più recenti dei membri esistenti con lo stesso nome, usa questo modificatore. Il modificatore u è consentito solo per l'operazione r (sostituisci). In particolare, la combinazione qu non è consentita, in quanto il controllo dei timestamp farebbe perdere qualsiasi vantaggio di velocità derivante dall'operazione q.
Non operare in modalità deterministica. Questo è l'inverso del modificatore D sopra: i file aggiunti e l'indice dell'archivio riceveranno i loro effettivi valori UID, GID, timestamp e modalità file. Questa è l'impostazione predefinita a meno che binutils non sia stato configurato con --enable-deterministic-archives.
Questo modificatore richiede la versione dettagliata di un'operazione. Molte operazioni visualizzano informazioni aggiuntive, come i nomi dei file elaborati, quando viene aggiunto il modificatore v.
Questo modificatore mostra il numero di versione di ar.
Il programma ar supporta anche alcune opzioni della riga di comando che non sono né modificatori né azioni, ma che ne modificano il comportamento in modi specifici:
Visualizza l'elenco delle opzioni della riga di comando supportate da ar e poi esce.
Visualizza le informazioni sulla versione di ar e poi esce.
ar ignora un'opzione iniziale scritta -X32_64, per compatibilità con AIX. Il comportamento prodotto da questa opzione è quello predefinito per GNU ar. ar non supporta nessuna delle altre opzioni -X; in particolare, non supporta -X32 che è l'impostazione predefinita per AIX ar.
L'opzione facoltativa della riga di comando --plugin name fa in modo che ar carichi il plugin chiamato name che aggiunge il supporto per più formati di file, inclusi file oggetto con informazioni sull'ottimizzazione del tempo di collegamento. Questa opzione è disponibile solo se la toolchain è stata creata con il supporto plugin abilitato. Se --plugin non è fornito, ma il supporto del plugin è stato abilitato allora ar itera sui file in $ {libdir}/bfd-plugins in ordine alfabetico e viene utilizzato il primo plug-in che rivendica l'oggetto in questione. Tieni presente che questa directory di ricerca del plug-in non è quella utilizzata dall'opzione -plugin di ld. Per fare in modo che ar utilizzi il plug-in del linker, è necessario copiarlo nella directory $ {libdir}/bfd-plugins. Per le compilazioni basate su GCC il plugin del linker è chiamato liblto_plugin.so.0.0.0. Per le compilation basate su Clang si chiama LLVMgold.so. Il plugin GCC è sempre retrocompatibile con le versioni precedenti, quindi è sufficiente copiare solo quello più recente.
L'opzione facoltativa della riga di comando --target bfdname specifica che i membri dell'archivio sono in un formato di codice oggetto diverso dal formato predefinito del sistema. Vedere
L'opzione --output può essere utilizzata per specificare un percorso a una directory in cui devono essere estratti i membri dell'archivio. Se questa opzione non è specificata, verrà utilizzata la directory corrente. Nota: sebbene la presenza di questa opzione implichi un'operazione di estrazione x, tale opzione deve comunque essere inclusa nella riga di comando.
L'opzione --record-libdeps è identica al modificatore l, solo gestita in forma estesa.
Trasforma l'archivio specificato in un archivio sottile. Se esiste già ed è un archivio regolare, i membri esistenti devono essere presenti nella stessa directory di archive.
Leggi le opzioni della riga di comando da file. Le opzioni lette vengono inserite al posto dell'opzione originale @file. Se file non esiste o non può essere letto, allora l'opzione verrà trattata letteralmente e non rimossa. Le opzioni in file sono separate da spazi bianchi. Un carattere di spaziatura può essere incluso in un'opzione racchiudendo l'intera opzione tra virgolette singole o doppie. È possibile includere qualsiasi carattere (inclusa una barra rovesciata) anteponendo al carattere da includere una barra rovesciata. Il file stesso può contenere ulteriori opzioni @file; tali opzioni verranno elaborate in modo ricorsivo.
nm (1), ranlib (1), and the Info entries for binutils.
Copyright (c) 1991-2023 Free Software Foundation, Inc.
È concesso il permesso di copiare, distribuire e/o modificare questo documento secondo i termini della GNU Free Documentation License, versione 1.3 o qualsiasi versione successiva pubblicata dalla Free Software Foundation; senza sezioni invarianti, senza testi di copertina e senza testi di quarta di copertina. Una copia della licenza è inclusa nella sezione intitolata GNU Free Documentation License.