Ar (Unix)
From Free net encyclopedia
The archiver (also known simply as ar) is a Unix utility that maintains groups of files as a single archive file. Generally, ar is used to create and update library files that the link editor or linker uses; however, it can be used to create archives for any purpose. ar is included as one of the GNU Binutils.
For example, to create an archive from files class1.o, class2.o, class3.o, the following command would be used:
ar rcs libclass.a class1.o class2.o class3.o
to compile a program that depends on class1.o, class2.o, and class3.o one could do:
cc main.c -L. -lclass
instead of:
cc main.c class1.o class2.o class3.o
The -L and -l switches instruct the linker to look for the library "libclass.a" in the current directory.
Contents |
File format details
The ar format has never been standardised, modern archives are based on a common format with two known variants, BSD and GNU.
Historically there have been other variants including AIX (small), AIX (big) and Coherent, they vary significantly from the common format.
deb archives use the common format.
An ar file begins with a global header, follow by a header and data section for each file stored within the ar file.
The data section is 2 byte aligned, if it would end on an odd offset a "\n" is used as filler.
Global header
The global header is a single field containing the magic ASCII string "!<arch>" followed by a single LF control character
File header
The common format is as follows.
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 |
Due to the limitations of file name length and format, both the GNU and BSD variants devised different methods of achieving extended filenames.
BSD variant
BSD ar store extended filenames by placing the string "#1/" followed by the file name length in the file name field, and appending the real filename to the file header.
GNU variant
GNU ar stores multiple extended filenames in the data section of a file with the name "//", this record is referred to by future headers. A header references an extended filename by storing a "/" followed by a decimal offset to the start of the filename in the extended filename data section.
GNU ar uses a '/' to mark the end of the filename, this allows for the use of spaces without the use of an extended filename.
GNU ar uses the special filename "/ " to denote that the following data entry contains a symbol lookup table, which is used in ar libraries to speed up access