Several linker script commands deal with files.
INCLUDE filename ¶
Include the linker script filename at this point. The file will
be searched for in the current directory, and in any directory specified
with the -L option. You can nest calls to
INCLUDE up to
10 levels deep.
You can place
INCLUDE directives at the top level, in
SECTIONS commands, or in output section descriptions.
INPUT(file, file, …) ¶
INPUT(file file …)
INPUT command directs the linker to include the named files
in the link, as though they were named on the command line.
For example, if you always want to include subr.o any time you do a link, but you can’t be bothered to put it on every link command line, then you can put ‘INPUT (subr.o)’ in your linker script.
In fact, if you like, you can list all of your input files in the linker script, and then invoke the linker with nothing but a ‘-T’ option.
In case a sysroot prefix is configured, and the filename starts
with the ‘/’ character, and the script being processed was
located inside the sysroot prefix, the filename will be looked
for in the sysroot prefix. The sysroot prefix can also be forced by specifying
= as the first character in the filename path, or prefixing the
filename path with
$SYSROOT. See also the description of
‘-L’ in Command-line Options.
If a sysroot prefix is not used then the linker will try to open the file in the directory containing the linker script. If it is not found the linker will then search the current directory. If it is still not found the linker will search through the archive library search path.
If you use ‘INPUT (-lfile)’,
ld will transform the
libfile.a, as with the command-line argument
When you use the
INPUT command in an implicit linker script, the
files will be included in the link at the point at which the linker
script file is included. This can affect archive searching.
GROUP(file, file, …) ¶
GROUP(file file …)
GROUP command is like
INPUT, except that the named
files should all be archives, and they are searched repeatedly until no
new undefined references are created. See the description of ‘-(’
in Command-line Options.
AS_NEEDED(file, file, …) ¶
AS_NEEDED(file file …)
This construct can appear only inside of the
commands, among other filenames. The files listed will be handled
as if they appear directly in the
with the exception of ELF shared libraries, that will be added only
when they are actually needed. This construct essentially enables
--as-needed option for all the files listed inside of it
and restores previous --as-needed resp. --no-as-needed
OUTPUT command names the output file. Using
OUTPUT(filename) in the linker script is exactly like using
‘-o filename’ on the command line (see Command
Line Options). If both are used, the command-line option takes
You can use the
OUTPUT command to define a default name for the
output file other than the usual default of a.out.
SEARCH_DIR command adds path to the list of paths where
ld looks for archive libraries. Using
SEARCH_DIR(path) is exactly like using ‘-L path’
on the command line (see Command-line Options). If both
are used, then the linker will search both paths. Paths specified using
the command-line option are searched first.
STARTUP command is just like the
INPUT command, except
that filename will become the first input file to be linked, as
though it were specified first on the command line. This may be useful
when using a system in which the entry point is always the start of the