# About the ARM linker

The ARM linker, armlink, accepts as input:

- one or more separately compiled or assembled object files written in ARM Object Format (see ARM object format for a synopsis, and ARM Object Format for details);

- optionally, one or more object libraries in ARM Object Library Format (see ARM Object Library Format for details).

The ARM linker performs the following functions:

- it resolves symbolic references between object files;

- it extracts from object libraries the object modules needed to satisfy otherwise unsatisfied symbolic references;

- it sorts object fragments (AOF areas) according to their attributes and names , and consolidates similarly attributed and named fragments into contiguous chunks;

- it relocates (possibly partially) relocatable values;

- it generates an output image possibly comprising several files (or a partially linked object file instead).

The ARM linker can produce output in any of the following formats:

- ARM Object Format, (see ARM object format for a synopsis, and ARM Object Format for details).

- Plain binary format, relocated to a fixed address, (see Plain binary format).

- ARM Image Format, (see ARM image format, and also ARM Image Format (Technical Specifications).

- Extended Intellec Hex Format, suitable for driving the Compass integrated circuit design tools, (see Extended intellec hex Format (IHF)).

- ARM Shared Library Format: a read-only position-independent reentrant sharable code segment (or shared library), written as a plain binary file, together with a stub containing read-write data, entry veneers, etc., written in ARM Object Format. See ARM shared library format for details.

- ARM Overlay Format: a root segment written in ARM Image Format, together with a collection of overlay segments, each written as a plain binary file. A system of overlays may be static (each segment bound to a fixed address at link time), or dynamic (each segment may be relocated when it is loaded).

For details of how to use the options available on the linker command line see The ARM Linker (armlink).