AR(5)

NAME
ar - archive (library) file format

SYNOPSIS
#include <ar.h>

DESCRIPTION

The archive command ar combines several files into one. Archives are used mainly as libraries to be searched by the link-editor ld(1).

A file produced by ar has a magic string at the start, followed by the constituent files, each preceded by a file header. The magic number and header layout as described in the include file are:

    #define	ARMAG	"!<arch>
    #define	SARMAG	8
    #define	ARFMAG	"`
    struct ar_hdr {
    	char	ar_name[16];
    	char	ar_date[12];
    	char	ar_uid[6];
    	char	ar_gid[6];
    	char	ar_mode[8];
    	char	ar_size[10];
    	char	ar_fmag[2];
    };

The name is a blank-padded string. The ar_fmag field contains ARFMAG to help verify the presence of a header. The other fields are left-adjusted, blank-padded numbers. They are decimal except for ar_mode, which is octal. The date is the modification date of the file at the time of its insertion into the archive.

Each file begins on a even (0 mod 2) boundary; a NEWLINE is inserted between files if necessary. Nevertheless the size given reflects the actual size of the file exclusive of padding.

There is no provision for empty areas in an archive file.

The encoding of the header is portable across machines. If an archive contains printable files, the archive itself is printable.

Sun386i DESCRIPTION

The file produced by ar on Sun386i systems is identical to that described above with the following changes:

Each archive containing COFF files [see coff(5)] includes an archive symbol table. This symbol table is used by the link editor ld to determine which archive members must be loaded during the link edit process. The archive symbol table (if it exists) is always the first file in the archive (but is never listed) and is automatically created and/or updated by ar.

The ar_name field of the ar_hdr structure described above is blank-padded and slash (/) terminated. Common format archives can be moved from system to system as long as the portable archive command ar is used. Conversion tools such as convert exist to aid in the transportation of non-common format archives to this format.

Each archive file member begins on an even byte boundary; a NEWLINE is inserted between files if necessary. Nevertheless the size given reflects the actual size of the file exclusive of padding.

If the archive symbol table exists, the first file in the archive has a zero length name (i.e., ar_name[0] == '/' ). The contents of this file are as follows:

•   The number of symbols. Length: 4 bytes.

•   The array of offsets into the archive file. Length: 4 bytes * “the number of symbols”.

•   The name string table. Length: ar_size - (4 bytes * (“the number of symbols” + 1)).

The number of symbols and the array of offsets are managed with sgetl and sputl. The string table contains exactly as many null terminated strings as there are elements in the offsets array. Each offset from the array is associated with the corresponding name from the string table (in order). The names in the string table are all the defined global symbols found in the common object files in the archive. Each offset is the location of the archive header for the associated symbol.

SEE ALSO
ar(1V), ld(1), nm(1)

Sun386i WARNINGS

strip(1) will remove all archive symbol entries from the header. The archive symbol entries must be restored via the ts option of the ar(1V) command before the archive can be used with the link editor ld(1).

BUGS

Filenames lose trailing blanks. Most software dealing with archives takes even an included blank as a name terminator.