ar.4 (2010 09)
a
ar(4) ar(4)
NAME
ar - common archive file format
SYNOPSIS
#include <ar.h>
DESCRIPTION
The ar command is used to concatenate several files into an archive file (see ar(1)). Archives are used
mainly as libraries to be searched by the link editor (see ld(1)).
Each archive begins with the archive magic string.
#define ARMAG "!<arch>\n" /* magic string */
#define SARMAG 8 /* length of magic string */
Following the archive magic string are the archive file members. Each file member is preceded by a file
member header which is of the following format:
#define ARFMAG "‘\n" /* header trailer string */
#define AR_NAME_LEN 16 /* ar_name size, includes ‘/’ */
struct ar_hdr /* archive file member header - printable ascii */
{
char ar_name[16]; /* file member name - ‘/’ terminated */
char ar_date[12]; /* file member date - decimal */
char ar_uid[6]; /* file member user id - decimal */
char ar_gid[6]; /* file member group id - decimal */
char ar_mode[8]; /* file member mode - octal */
char ar_size[10]; /* file member size - decimal */
char ar_fmag[2]; /* ARFMAG - string to end header */
};
All information in the file member headers is in printable ASCII. The numeric information contained in
the headers is stored as decimal numbers (except for ar_mode which is in octal). Thus, if the archive
contains printable files, the archive itself is printable.
The contents of the
ar_name field are slash (/) terminated and blank-padded. The
ar_date field is
the modification date of the file at the time of its insertion into the archive. Common format archives can
be moved from system to system as long as the portable archive command
ar is used. Note that older
versions of ar did not use the common archive format, and those archives cannot be read or written by
the common archiver.
Each archive file member begins on an even byte boundary; a new-line character is inserted between files
if necessary. Nevertheless, the size given reflects the actual size of the file exclusive of padding.
Notice there is no provision for empty areas in an archive file. If the archive symbol table exists, the first
file in the archive has a zero-length name (i.e.,
ar_name[0] == ’/’ and ar_name[1] == ’ ’).
The contents of this archive member are machine-dependent. Refer to the appropriate a.out (4) manual
entry for more information.
Each archive which contains object files (see a.out (4)) may include an archive symbol table. This symbol
table is used by the link editor (see ld(1)) to determine which archive members must be loaded during the
link edit process. The archive symbol table (if it exists) is always the first member in the archive (but is
never listed) and is automatically created and/or updated by
ar.
If a member with a file name greater than 15 bytes exists within the archive, then the archive will also
contain an additional special member to store the long file name string table. The special string table
member has a zero length name where
ar_name[0] == ’/’ and ar_name[1] == ’/’.
If a special string table exists, it will precede all non-special archive members. If both a symbol table
member and a string table member exist then the symbol table member will always precede the string
table member.
Each entry in the string table is followed by a slash and a new-line character. The offset of the table
begins at zero. If an archive member name exceeds 15 bytes, then the
ar_name entry in the member’s
header does not contain a name, instead it contains the offset into the string table preceded by a slash.
For example, the member name
thisverylongfilename.o contains /0 in the ar_name field. This
value represents the offset into the string table. The member name yetanotherlongfilename.o
HP-UX 11i Version 3: September 2010 − 1 − Hewlett-Packard Company 1