L'archiver (noto anche come ar) è un tool Unix che mantiene gruppi di file come un unico file di archivio. Attualmente ar è solitamente utilizzato per creare ed aggiornare solamente file di libreria che il linker usa. Possono essere utilizzati per creare archivi di ogni genere, ma è stato generalmente rimpiazzato dal formato di file tar per scopi che vanno oltre il linking di librerie. ar è incluso come una delle GNU Binutils.
Esempi
Per esempio, per creare un archivio dai file class1.o, class2.o, class3.o, bisogna usare il seguente comando:
ar rcs libclass.a class1.o class2.o class3.o
per compilare un programma che dipende da class1.o, class2.o, and class3.o si può fare:
cc main.c -L. -lclass
invece di:
cc main.c class1.o class2.o class3.o
Il parametro -L e -l istruisce il linker per cercare la libreria "libclass.a" nella directory corrente.
Il formato ar non è mai stato standardizzato, archivi recenti sono basati su un formato comune con due varianti conosciute, BSD e GNU.
Storicamente ci sono state altre varianti che includono AIX (small), AIX (big) e Coherent, variano significativamente dal formato comune.
Gli archivi deb usano il formato comune.
Un file ar inizia con una intestazione globale, seguita da una sezione di intestazione e dati per ogni file immagazzinato nel file ar.
La sezione di dati è allineata su 2 byte, se finisce con un formato dispari si riempie con un "\n".
Intestazione globale
L'intestazione globale è un singolo campo che contiene la stringa ASCII "!<arch>" seguita da un singolo carattere di controllo LF.
Intestazione di File
Il formato comune è come segue.
Field Offset from
|
Field Offset to
|
Field Name
|
Field Format
|
0
|
15
|
File name
|
ASCII
|
16
|
27
|
File date
|
Decimal
|
28
|
33
|
Owner ID
|
Decimal
|
34
|
39
|
Group ID
|
Decimal
|
40
|
47
|
File mode
|
Octal
|
48
|
57
|
File size in bytes
|
Decimal
|
58
|
59
|
Header magic
|
'\n
|
Per colpa delle limitazioni sulla lunghezza e il formato dei file, sia la varianti GNU che BSD utilizzano metodi differenti per raggiungere nomi di file estesi.
Variante BSD
Gli ar BSD immagazzinano i nomi dei file estesi piazzando la stringa "#1/" seguita dalla lunghezza del nome del file nel campo del nome del file, e aggiungono il vero nome del file nell'intestazione del file.
Variante GNU
Gli ar GNU immagazzinano più nomi di file estesi nella sezione dei dati con il nome "//", questo record si riferisce a intestazioni successive. Una intestazione referenzia un nome di file esteso immagazzinando un "/" seguito da uno spiazzamento decimale all'inizio del nome del file nella sezione dei dati del file esteso.
L'ar GNU usa un '/' per segnare la fine di un nome di file, questo permette l'uso di spazi senza l'uso di un filename esteso.
L'ar GNU usa il nome di file speciale "/ " per far notare che le seguenti informazioni sui dati contengono una tabella di lookup di simboli, che viene usata nelle librerie ar per velocizzarne l'accesso
Voci correlate
Altri progetti
Collegamenti esterni