Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > A


HP-UX 11i Version 3: February 2007

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index


ar — common archive file format


#include <ar.h>


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 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|              


System Tools:


create archived libraries


invoke the link editor



assembler, compiler, and linker output


magic number for HP-UX implementations


regenerate an archive symbol table


strip symbol and line number information from an object file


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.

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.