Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ld(1) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

a.out(4)

ar(4)

as(1)

cc(1)

end(3C)

exec(2)

exit(2)






       ld(1)                                                          ld(1)


       NAME
             ld - link editor for object files

       SYNOPSIS
             ld [options] file . . .

       DESCRIPTION
             The ld command combines relocatable object files, performs
             relocation, and resolves external symbols.  ld operates in two
             modes, static or dynamic, as governed by the -d option.  In
             static mode, -dn, relocatable object files given as arguments
             are combined to produce an executable object file; if the -r
             option is specified, relocatable object files are combined to
             produce one relocatable object file.  In dynamic mode, -dy
             (the default), relocatable object files given as arguments are
             combined to produce an executable object file that will be
             linked at execution with any shared object files given as
             arguments; if the -G option is specified, relocatable object
             files are combined to produce a shared object.  In all cases,
             the output of ld is left in a.out by default.

             If any argument is a library, it is searched only at the point
             it is encountered in the argument list.  The library may be
             either a relocatable archive or a shared object.  For an
             archive library, only those object file members defining an
             unresolved external reference are loaded.  The archive library
             symbol table [see ar(4)] is searched sequentially with as many
             passes as are necessary to resolve external references that
             can be satisfied by library members.  Thus, the ordering of
             members in the library is typically unimportant, unless there
             exist multiple library members defining the same external
             symbol.  A shared object consists of a single entity all of
             whose references must be resolved within the executable being
             built or within other shared objects with which it is linked.

             The following options are recognized by ld:

             -a      In static mode only, produce an executable object
                     file; give errors for undefined references.  This is
                     the default behavior for static mode.  -a may not be
                     used with the -r option.

             -b      In dynamic mode only, when creating an executable, do
                     not do special processing for relocations that
                     reference symbols in shared objects.  Without the -b
                     option, the link editor will create special position-


                           Copyright 1994 Novell, Inc.               Page 1













      ld(1)                                                          ld(1)


                    independent relocations for references to functions
                    defined in shared objects and will arrange for data
                    objects defined in shared objects to be copied into
                    the memory image of the executable by the dynamic
                    linker at run time.  With the -b option, the output
                    code may be more efficient, but it will be less
                    sharable.

            -d yn   ld uses static linking only when yn is n; otherwise,
                    by default, or when yn is y, ld uses dynamic linking.

            -e epsym
                    Set the entry point address for the output file to be
                    that of the symbol epsym.

            -h name In dynamic mode only, when building a shared object,
                    record name in the object's dynamic section.  name
                    will be recorded in executables that are linked with
                    this object rather than the shared object's pathname.
                    Accordingly, name will be used by the dynamic linker
                    as the pathname of the shared object to search for at
                    run time.

            -lx     Search a library libx.so or libx.a, the conventional
                    names for shared object and archive libraries,
                    respectively.  In dynamic mode, unless the -Bstatic
                    option is in effect, ld searches each directory
                    specified in the library search path for a file
                    libx.so or libx.a.  The directory search stops at the
                    first directory containing either.  ld chooses the
                    file ending in .so if -lx expands to two files whose
                    names are of the form libx.so and libx.a.  If no
                    libx.so is found, then ld accepts libx.a.  In static
                    mode, or when the -Bstatic option is in effect, ld
                    selects only the file ending in .a.  A library is
                    searched when its name is encountered, so the order of
                    the -l, -B and -L is significant.

            -m      Produce a memory map or listing of the input/output
                    sections on the standard output.

            -o outfile
                    Produce an output object file named outfile.  The name
                    of the default object file is a.out.




                          Copyright 1994 Novell, Inc.               Page 2













       ld(1)                                                          ld(1)


             -r      Combine relocatable object files to produce one
                     relocatable object file.  ld will not complain about
                     unresolved references.  This option cannot be used in
                     dynamic mode or with -a.

             -s      Strip symbolic information from the output file.  The
                     debug and line sections and their associated
                     relocation entries will be removed.  Except for
                     relocatable files or shared objects, the symbol table
                     and string table sections will also be removed from
                     the output object file.

             -t      Turn off the warning about multiply defined symbols
                     that are not the same size.

             -u symname
                     Enter symname as an undefined symbol in the symbol
                     table.  This is useful for loading entirely from an
                     archive library, since initially the symbol table is
                     empty and an unresolved reference is needed to force
                     the loading of the first routine.  The placement of
                     this option on the command line is significant; it
                     must be placed before the library that will define the
                     symbol.

             -z defs Force a fatal error if any undefined symbols remain at
                     the end of the link.  This is the default when
                     building an executable.  It is also useful when
                     building a shared object to assure that the object is
                     self-contained, that is, that all its symbolic
                     references are resolved internally.

             -z nodefs
                     Allow undefined symbols.  This is the default when
                     building a shared object.  It may be used when
                     building an executable in dynamic mode and linking
                     with a shared object that has unresolved references in
                     routines not used by that executable.  This option
                     should be used with caution.

             -z text In dynamic mode only, force a fatal error if any
                     relocations against non-writable, allocatable sections
                     remain.





                           Copyright 1994 Novell, Inc.               Page 3













      ld(1)                                                          ld(1)


            -B arg  where arg can be any one of the following:

                    dynstat
                          dynstat can be either dynamic or static.  These
                          options govern library inclusion.  dynamic is
                          valid in dynamic mode only.  These options may
                          be specified any number of times on the command
                          line as toggles: if -Bstatic is given, no shared
                          objects will be accepted until -Bdynamic is
                          seen.  See also the -l option.

                    symbolic[=list | :filename]
                          where list is a comma separated sequence of
                          symbol names.  filename contains a list of
                          symbol names, one symbol name per line.  Any
                          line beginning with a # character and blank
                          lines are ignored.  When building a shared
                          object, if a definition for a named symbol
                          exists, bind all references to the named symbol
                          to that definition.  If no list of symbols is
                          provided, bind all references to symbols to
                          definitions that are available; ld will issue
                          warnings for undefined symbols unless -z defs
                          overrides.  Normally, references to global
                          symbols within shared objects are not bound
                          until run time, even if definitions are
                          available, so that definitions of the same
                          symbol in an executable or other shared objects
                          can override the object's own definition.

                    bind_now
                          In dynamic mode only, this option adds a
                          DT_BIND_NOW entry to the dynamic linker to
                          process all relocations for the object
                          containing this entry before transferring
                          control to the program.  The presence of
                          DT_BIND_NOW takes precedence over a directive to
                          use lazy binding for this object when specified
                          through the environment or via dlopen.

                    export[=list | :filename]
                    hide[=list | :filename]
                          where list is a comma separated sequence of
                          symbol names. filename contains a list of symbol
                          names, one symbol name per line.  Any line
                          beginning with a # character and blank lines are


                          Copyright 1994 Novell, Inc.               Page 4













       ld(1)                                                          ld(1)


                           ignored.

                           Normally, when building a shared object, ld
                           makes all global and weak names defined in the
                           shared object visible outside of the object
                           itself (exported).  When building an executable,
                           it makes visible only those names used by the
                           shared objects with which the executable is
                           linked.  All other names are hidden.  This
                           behavior can be modified with -Bhide and
                           -Bexport.

                           When building a shared object, -Bexport is the
                           default.  All global and weak definitions are
                           exported.  -Bexport with a set of symbol names
                           instructs ld to hide all global and weak
                           definitions, except those in the specified set.
                           -Bhide means to hide all global and weak
                           definitions.  -Bhide with a set of symbol names
                           means to export all global and weak definitions,
                           except for those in the set of names.

                           When building an executable, -Bhide is the
                           default.  Only those names referenced by the
                           shared objects with which the executable is
                           linked are exported.  -Bhide with a set of
                           symbol names instructs ld to export all global
                           and weak definitions, except those in the
                           specified set.  Names in a -Bhide list that are
                           referenced by the shared objects with which the
                           executable is linked, are ignored, that is, they
                           are exported.  -Bexport means to export all
                           global and weak definitions.  -Bexport with a
                           set of symbol names means to hide all global and
                           weak definitions except those in the set of
                           names and those referenced by the shared objects
                           with which the executable is linked.

                           If -Bhide and -Bexport are used together, one of
                           the options must contain a set of symbol names
                           and the other must not.  In this case, the
                           option without the symbol set is ignored.
                           Neither -Bhide nor -Bexport may be used with
                           -dn.




                           Copyright 1994 Novell, Inc.               Page 5













      ld(1)                                                          ld(1)


                    sortbss
                          All uninitialized global variables within a
                          module will be assigned contiguous addresses.
                          This is the way these variables were assigned by
                          the COFF version of the link editor.

            -G      In dynamic mode only, produce a shared object.
                    Undefined symbols are allowed unless the -z defs
                    option is specified.

            -I name When building an executable, use name as the pathname
                    of the interpreter to be written into the program
                    header.  The default in static mode is no interpreter;
                    in dynamic mode, the default is the name of the
                    dynamic linker, /usr/lib/libc.so.1.  Either case may
                    be overridden by -I.  exec will load this interpreter
                    when it loads the a.out and will pass control to the
                    interpreter rather than to the a.out directly.

            -L path Add path to the library search directories.  ld
                    searches for libraries first in any directories
                    specified with -L options (in order), and then in the
                    standard directories (see the -YP option).  This
                    option is effective only if it precedes a -l option on
                    the command line.

            -M mapfile
                    In static mode only, read mapfile as a text file of
                    directives to ld.  Because these directives change the
                    shape of the output file created by ld, use of this
                    option is strongly discouraged.

            -Q yn   If yn is y, an identification string is added to the
                    .comment section of the output file to identify the
                    version of the link editor used to create the file.
                    This will result in multiple instances of such when
                    there have been multiple linking steps, such as when
                    using ld -r.  This is identical with the default
                    action of the cc command.  If yn is n (the default),
                    the version information is suppressed.

            -V      Output a message giving information about the version
                    of ld being used.





                          Copyright 1994 Novell, Inc.               Page 6













       ld(1)                                                          ld(1)


             -YP, dirlist
                     Change the default directories used for finding
                     libraries.  dirlist is a colon-separated path list.

             The environment variable LD_LIBRARY_PATH may be used to
             specify library search directories.  In the most general case,
             it will contain two directory lists separated by a semicolon:
                   dirlist1;dirlist2

             Thus, if ld is called with the following occurrences of -L:
                   ld . . . -Lpath1 . . . -Lpathn . . . -lx

             then the search path ordering for the library x (libx.so or
             libx.a) is:
                   dirlist1 path1 . . . pathn dirlist2 LIBPATH

             LD_LIBRARY_PATH is also used to specify library search
             directories to the dynamic linker at run time.  That is, if
             LD_LIBRARY_PATH exists in the environment, the dynamic linker
             will search the directories it names before its default
             directory for shared objects to be linked with the program at
             execution.

             Additionally, the environment variable LD_RUN_PATH (which also
             contains a directory list) may be used to specify library
             search directories to the dynamic linker.  If present and not
             empty, it is passed to the dynamic linker by ld via data
             stored in the output object file.

       FILES
            libx.so
                    libraries
            libx.a libraries
            a.out  output file
            LIBPATH
                    usually /usr/ccs/lib:/usr/lib
            /usr/lib/local/locale/LC_MESSAGES/uxcds
                    language-specific message file [See LANG on
                    environ(5).]

       REFERENCES
             a.out(4), ar(4), as(1), cc(1), end(3C), exec(2), exit(2)

       NOTICES
             Through its options, the link editor gives users great
             flexibility; however, those who use the -M mapfile option must


                           Copyright 1994 Novell, Inc.               Page 7













      ld(1)                                                          ld(1)


            assume some added responsibilities.  Use of this feature is
            strongly discouraged.














































                          Copyright 1994 Novell, Inc.               Page 8








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026