ar - common archive file format
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
#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; /* file member name - `/' terminated */
char ar_date; /* file member date - decimal */
char ar_uid; /* file member user id - decimal */
char ar_gid; /* file member group id - decimal */
char ar_mode; /* file member mode - octal */
char ar_size; /* file member size - decimal */
char ar_fmag; /* 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
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.
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
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 == '/' and ar_name == ' '). 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 == '/' and
ar_name == '/'.
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 contains /27 in the ar_name
field. The long name string table would have the following format:
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9
0| t | h | i | s | i | s | a | v | e | r |
10| y | l | o | n | g | f | i | l | e | n |
20| a | m | e | . | o | / | \n | y | e | t |
30| a | n | o | t | h | e | r | l | o | n |
40| g | f | i | l | e | n | a | m | e | . |
50| o | / | \n |
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000
ar(1) create archived libraries
ld(1) invoke the link editor
a.out(4) assembler, compiler, and linker output
magic(4) magic number for HP-UX implementations
ranlib(1) regenerate an archive symbol table
strip(1) strip symbol and line number information from an
strip removes the archive symbol table member from the archive (see
strip(1)). The archive symbol table must be restored by using the -ts
option of the ar command or the ranlib(1) command before the archive
can be used with the ld link editor.
Hewlett-Packard Company - 3 - HP-UX Release 11i: November 2000