You copied the Doc URL to your clipboard.

About the linker

The linker, armlink, combines the contents of one or more object files with selected parts of one or more object libraries to produce:

  • an ARM ELF image

  • a partially linked ELF object that can be used as input in a subsequent link step

  • ELF files that can be demand-paged efficiently

  • a shared object, compatible with the Base Platform Application Binary Interface (BPABI) or System V release 4 (SysV) specification, or a BPABI or SysV executable file.

The linker can:

  • link ARM code and 16-bit Thumb® and 32-bit Thumb code

  • generate interworking veneers to switch processor state when required

  • generate inline veneers or long branch veneers, where required, to extend the range of branch instructions

  • automatically select the appropriate standard C or C++ library variants to link with, based on the build attributes of the objects it is linking

  • enable you to specify the locations of code and data within the system memory map, using either a command-line option or a scatter file

  • perform Read/Write data compression to minimize ROM size

  • perform unused section elimination to reduce the size of your output image

  • control the generation of debug information in the output file

  • generate a static callgraph and list the stack usage

  • control the contents of the symbol table in output images

  • show the sizes of code and data in the output

  • use linker feedback to remove individual unused functions

  • accept GNU ld scripts, with restrictions.


A 64-bit version of armlink is provided that can utilize the greater amount of memory available to processes on 64-bit operating systems. It supports all the features that are supported by the 32-bit version of armlink in this release.