man(1) Manual page archive


     LD(1)                                                       LD(1)

     NAME
          ld - link editor or loader

     SYNOPSIS
          ld [ option ... ] file ...

     DESCRIPTION
          Ld combines several object programs into one, resolves
          external references, and searches libraries.  In the sim-
          plest case several object files are given, and ld combines
          them, producing an object module which can be either exe-
          cuted or become the input for a further ld run.  (In the
          latter case, the -r option must be given to preserve the
          relocation bits.)  The output of ld is left on This file is
          made executable only if no errors occurred during the load.

          The argument routines are concatenated in the order speci-
          fied.  The entry point of the output is the beginning of the
          first routine (unless the -e option is specified).

          If any argument is a library, it is searched exactly once at
          the point it is encountered in the argument list.  Only
          those routines defining an unresolved external reference are
          loaded.  If a routine from a library references another rou-
          tine in the library, and the library has not been processed
          by ranlib (see ar(1)), the referenced routine must appear
          after the referencing routine in the library.  Thus the
          order of programs within libraries may be important; see
          lorder(1). The first member of a library should be a file
          named __.SYMDEF, which is understood to be a dictionary for
          the library as produced by ranlib; the dictionary is
          searched iteratively to satisfy as many references as possi-
          ble.

          The symbols `_etext', `_edata', and `_end' (`etext',
          `edata', and `end' in C) are reserved, and if referred to,
          are set to the first location above the program, the first
          location above initialized data, and the first location
          above all data, respectively.  It is erroneous to define
          these symbols.

          Ld understands several options.  Except for -l and -o, they
          should appear before the file names.

          -A   Load incrementally, so that the resulting object code
               may be read into an already executing program.  The
               next argument names an object file whose symbol table
               will be added to.  Only newly linked material will be
               entered into the text and data portions of but the new
               symbol table will reflect every symbol defined before

     LD(1)                                                       LD(1)

               and after the incremental load.  -A must not follow any
               object file names.

          -D   Take the next argument as a hexadecimal number and pad
               the data segment with zeros to the indicated length.

          -d   Force definition of common storage even if the -r flag
               is present.

          -e   The following argument is taken to be the name of the
               entry point of the loaded program; location 0 is the
               default.

          -lx  This option is an abbreviation for the library name
               /lib/libx.a, where x is a string.  If that does not
               exist, ld tries /usr/lib/libx.a A library is searched
               when its name is encountered, so the placement of the
               option is significant.

          -M   produce a primitive load map, listing the names of the
               files which will be loaded.

          -N   Do not make the text portion read-only or sharable.
               (Use `magic number' 0407.)

          -n   Arrange that when the output file is executed, the text
               portion will be read-only and shared among all users
               executing the file.  (Use magic number 0410 and move
               the data segment to a 1024 byte boundary.)

          -o   The name argument after -o is used as the name of the
               ld output file, instead of

          -r   Generate relocation bits in the output file so that it
               can be the subject of another ld run.  This flag also
               prevents final fixing of `common' symbols (uninitial-
               ized C variables or Fortran common variables), and sup-
               presses `undefined symbol' diagnostics.

          -s   Strip the output, that is, remove the symbol table and
               relocation bits to save space (but impair the useful-
               ness of the debuggers).  This information can also be
               removed by strip(1).

          -S   Partially strip; remove all symbols that were not in
               the source.

          -T   The next argument is a hexadecimal number which sets
               the text segment origin.  With option -A this origin
               must be a multiple of 1024.  The default is 0, or _end
               with -A.

     LD(1)                                                       LD(1)

          -t   (trace)  Print the name of each file as it is pro-
               cessed.

          -u   Take the following argument as a symbol and enter it as
               undefined in the symbol table.  This is useful for
               loading wholly from a library, since initially the sym-
               bol table is empty and an unresolved reference is
               needed to force the loading of the first routine.

          -X   Save local symbols except for those whose names begin
               with `L'.  This option is used by cc(1) to discard
               internally-generated labels while retaining symbols
               local to routines.

          -x   Do not preserve local symbols in the output symbol
               table; only enter external symbols.  This option saves
               some space in the output file.

          -ysym
               Indicate each file in which sym appears, its type and
               whether the file defines or references it.  Many such
               options may be given to trace many symbols.  (It is
               usually necessary to begin sym with an underscore `_',
               as external C, Fortran, and Pascal variables begin with
               underscores.)

          -z   Arrange for the process to be loaded on demand from the
               resulting executable file (magic number 413) rather
               than preloaded.  This (default) output format has a
               1024-byte header followed by a text and data segment
               each of which have size a multiple of 1024 bytes (being
               padded out with zeros if necessary).  The first few BSS
               segment symbols may appear in the data segment to avoid
               wasting space at the end of that segment.

     FILES
          libraries
          more libraries
          output file

     SEE ALSO
          as(1), ar(1), cc(1), f77(1), size(1), nm(1), lorder(1),
          a.out(5)

     BUGS
          There is no way to force data to be page aligned.