ar Command
Purpose
Maintains the indexed libraries used by the linkage editor.
Syntax
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -h | -p | -t | -x } [ -X {32|64|32_64|d64| any}] ArchiveFile [ File ... ]
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -m | -r [ -u ] } [ { -a | -b | -i } PositionName ] [ -X {32|64|32_64|d64|any}] ArchiveFile File ...
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -d | -q } [ -X {32|64|32_64|d64|any}] ArchiveFile File ...
ar [ -c ] [ -l ] [ -v ] [ -C ] [ -T ] [ -z ] { -g | -o | -s | -w } [ -X {32|64|32_64|d64|any}] ArchiveFile
Description
The ar command maintains the indexed libraries used by the linkage editor. The ar command combines one or more named files into a single archive file written in ar archive format. When the ar command creates a library, it creates headers in a transportable format; when it creates or updates a library, it rebuilds the symbol table. See the ar file format entry for information on the format and structure of indexed archives and symbol tables.
There are two file formats that the ar command recognizes. The Big Archive Format, ar_big, is the default file format and supports both 32-bit and 64-bit object files. The Small Archive Format can be used to create archives that are recognized on versions older than AIX® 4.3, see the -g flag. If a 64-bit object is added to a small format archive, ar first converts it to the big format, unless -g is specified. By default, ar only handles 32-bit object files; any 64-bit object files in an archive are silently ignored. To change this behavior, use the -X flag or set the OBJECT_MODE environment variable.
Flags
In an ar command, you can specify any number of optional flags from the set cClosTv. You must specify one flag from the set of flags dhmopqrstwx. If you select the -m or -r flag, you may also specify a positioning flag (-a, -b, or -i); for the -a, -b, or -i flags, you must also specify the name of a file within ArchiveFile (PositionName), immediately following the flag list and separated from it by a blank.
Item | Description |
---|---|
-a PositionName | Positions the named files after the existing file identified by the PositionName parameter. |
-b PositionName | Positions the named files before the existing file identified by the PositionName parameter. |
-c | Suppresses the normal message that is produced when library is created. |
-C | Prevents extracted files from replacing like-named files in the file system. |
-d | Deletes the named files from the library. |
-g | Orders the members of the archive to ensure maximum loader efficiency with a minimum amount of unused space. In almost all cases, the -g flag physically positions the archive members in the order in which they are logically linked. The resulting archive is always written in the small format, so this flag can be used to convert a big-format archive to a small-format archive. Archives that contain 64-bit XCOFF objects cannot be created in or converted to the small format. |
-h | Sets the modification times in the member headers of the named files to the current date and time. If you do not specify any file names, the ar command sets the time stamps of all member headers. This flag cannot be used with the -z flag. |
-i PositionName | Positions the named files before the existing file identified by the PositionName parameter (same as the -b). |
-l | Places temporary files in the current (local) directory instead of the TMPDIR directory (by default /tmp). |
-m | Moves the named files to some other position in the library. By default, it moves the named files to the end of the library. Use a positioning flag (abi) to specify some other position. |
-o | Orders the members of the archive to ensure maximum loader efficiency with a minimum amount of unused space. In almost all cases, the -o flag physically positions the archive members in the order in which they are logically linked. The resulting archive is always written in the big archive format, so this flag can be used to convert a small-format archive to a big-format archive. |
-p | Writes to standard output the contents of the named in the Files parameter, or all files specified in the ArchiveFile parameter if you do not specify any files. |
-q | Adds the named files to the end of the library. In addition, if you name the same file twice, it may be put in the library twice. |
-r | Replaces a named file if it already appears in the library.
Because the named files occupy the same position in the library as
the files they replace, a positioning flag does not have any additional
effect. When used with the -u flag (update), the -r flag
replaces only files modified since they were last added to the library
file. If a named file does not already appear in the library, the ar command adds it. In this case, positioning flags do affect placement. If you do not specify a position, new files are placed at the end of the library. If you name the same file twice, it may be put in the library twice. |
-s | Forces the regeneration of the library symbol table whether or not the ar command modifies the library contents. Use this flag to restore the library symbol table after using the strip command on the library. |
-t | Writes to the standard output a table of contents for the library. If you specify file names, only those files appear. If you do not specify any files, the -t flag lists all files in the library. |
-T | Allows file name truncation if the archive member name is longer than the file system supports. This option has no effect because the file system supports names equal in length to the maximum archive member name of 255 characters. |
-u | Copies only files that have been changed since they were last copied (see the -r flag discussed previously). |
-v | Writes to standard output a verbose file-by-file description of the making of the new library. When used with the -t flag, it gives a long listing similar to that of the ls -l command. When used with the -x flag, it precedes each file with a name. When used with the -h flag, it lists the member name and the updated modification times. |
-w | Displays the archive symbol table. Each symbol is listed with the name of the file in which the symbol is defined. |
-x | Extracts the named files by copying them into the current directory. These copies have the same name as the original files, which remain in the library. If you do not specify any files, the -x flag copies all files out of the library. This process does not alter the library. |
-X mode | Specifies the type of object file ar should examine.
The mode must be one of the following:
|
-z | Creates a temporary copy of the archive and performs all requested modifications to the copy. When all operations have completed successfully, the working copy of the archive is copied over the original copy. This flag cannot be used with the -h flag. |
ArchiveFile | Specifies an archive file name; required. |
MemberName ... | Names of individual archive members. |
Exit Status
This command returns the following exit values:
Item | Description |
---|---|
0 | Successful completion. |
>0 | An error occurred. |
Examples
- To create a library, enter:
If the lib.a library does not exist, this command creates it and enters into it copies of the files strlen.o and strcpy.o. If the lib.a library does exist, then this command adds the new members to the end without checking for duplicate members. The v flag sets verbose mode, in which the ar command displays progress reports as it proceeds.ar -v -q lib.a strlen.o strcpy.o
- To list the table of contents
of a library, enter:
This command lists the table of contents of the lib.a library, displaying a long listing similar to the output of the ls -l command. To list only the member file names, omit the -v flag.ar -v -t lib.a
- To replace or add new
members to a library, enter:
This command replaces the members strlen.o and strcat.o. If lib.a was created as shown in example 1, then the strlen.o member is replaced. A member named strcat.o does not already exist, so it is added to the end of the library.ar -v -r lib.a strlen.o strcat.o
- To specify where to insert
a new member, enter:
This command adds the strcmp.o file, placing the new member before the strlen.o member.ar -v -r -b strlen.o lib.a strcmp.o
- To update a member if
it has been changed, enter:
This command replaces the existing strcpy.o member, but only if the file strcpy.o has been modified since it was last added to the library.ar -v -r -u lib.a strcpy.o
- To change the order of
the library members, enter:
This command moves the members strcat.o and strcpy.o to positions immediately after the strcmp.o member. The relative order of the strcat.o and strcpy.o members is preserved. In other words, if the strcpy.o member preceded the strcat.o member before the move, it still does.ar -v -m -a strcmp.o lib.a strcat.o strcpy.o
- To extract library members,
enter:
This command copies the members strcat.o and strcpy.o into individual files named strcat.o and strcpy.o, respectively.ar -v -x lib.a strcat.o strcpy.o
- To extract and rename
a member, enter:
This command copies the member strcpy.o to a file named stringcopy.o.ar -p lib.a strcpy.o >stringcopy.o
- To delete a member, enter:
This command deletes the member strlen.o from the lib.a library.ar -v -d lib.a strlen.o
- To create an archive library
from multiple shared modules created with the ldcommand, enter:
This command creates an archive library named libshr.a from the shared modules named shrsub.o, shrsub2.o, shrsub3.o, and so on. To compile and link the main program using the libshr.a archive library, use the following command:ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...
The main program is now executable. Any symbols referenced by the main program that are contained by the libshr.a archive library have been marked for deferred resolution. The -l flag specifies that the libshr.a library be searched for the symbols.cc -o main main.c -L/u/sharedlib -lshr
- To list the contents of lib.a, ignoring any 32-bit object
file, enter:
ar -X64 -t -v lib.a
- To extract all 32-bit object files from lib.a, enter:
ar -X32 -x lib.a
- To list all files in lib.a, whether 32-bit, 64-bit, or
non-objects, enter:
ar -X32_64 -t -v lib.a
File
Item | Description |
---|---|
/tmp/ar* | Contains temporary files. |