#### 3.4.2 Commands Dealing with Files

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 `MEMORY` or `SECTIONS` commands, or in output section descriptions.

`INPUT(file, file, …)`
`INPUT(file file …)`

  The `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. Otherwise, the linker will try to open the file in the current directory. If it is not found, the linker will search through the archive library search path. 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 you use ‘`INPUT (-lfile)`’, `ld` will transform the name to `libfile.a`, as with the command-line argument ‘`-l`’.

  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 …)`

  The `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 `INPUT` or `GROUP` commands, among other filenames. The files listed will be handled as if they appear directly in the `INPUT` or `GROUP` commands, 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` setting afterwards.

`OUTPUT(filename)`

  The `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 precedence.

  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(path)`

  The `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(filename)`

  The `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 first file.