ld(1) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

ld(1)

ld(1)                            User Commands                           ld(1)



NAME
       ld - link-editor for object files

SYNOPSIS
       ld [-32 | -64] [-B direct | nodirect] [-B dynamic | static]
            [-B eliminate[=mode] | local[=mode]] [-B reduce] [-c name]
            [-C] [-D [!]token1,[!]token2,...] [-e epsym]
            [-f name | -F name] [-G] [-h name] [-i] [-l x] [-L path]
            [-m] [-M mapfile] [-o outfile] [-p auditlib] [-P auditlib]
            [-Q y | n] [-r] [-R path] [-s] [-S supportlib] [-u symname]
            [-V] [-z allextract | defaultextract | weakextract ]
            [-z ancillary[=outfile]] [-z assert-deflib[=libname]]
            [-z compress-sections[=cmp-type]] [-z deferred | nodeferred]
            [-z defs | nodefs] [-z direct | nodirect]
            [-z discard-unused=item1,item2,...] [-z endfiltee]
            [-z fatal-warnings | nofatal-warnings] [-z finiarray=function]
            [-z globalaudit] [-z guidance[=item1,item2,...]] [-z help]
            [-z ignore | record] [-z initarray=function] [-z initfirst]
            [-z interpose] [-z lazyload | nolazyload]
            [-z ld32=arg1,arg2,...] [-z ld64=arg1,arg2,...]
            [-z loadfltr] [-z mapfile-add=name] [-z nodelete]
            [-z nodlopen] [-z parent=object] [-z preinitarray=function]
            [-z rescan-now] [-z rescan-start ... -z rescan-end]
            [-z strip-class=[!]class1,[!]class2,...] [-z stub]
            [-z sx=extension[=mode]] [-z symbolcap] [-z sysroot=dir]
            [-z target=sparc | x86] [-z text | textwarn | textoff]
            [-z type=object-type] [-z verbose] [-z wrap=symbol]
            file ...

DESCRIPTION
       The  link-editor,  ld,  combines  relocatable object files by resolving
       symbol references to symbol definitions, together with performing relo‐
       cations. In all cases, the default output of the link-editor is left in
       the file a.out. See NOTES.


       The link-editor has a large number of options. Those options  that  are
       relevant  to  modern programming practices are defined in the SYNOPSIS,
       and described in the sections that follow. Other options are less  com‐
       monly used, and are described under the SECONDARY OPTIONS section.


       The  link-editor  takes  a  variety of input files, typically generated
       from compilers, assemblers, or previous invocations of the link-editor.
       The link-editor concatenates and interprets the data within these input
       files to form an output file. The output file that is produced  is  one
       of the following basic types.

           o      Dynamic  Executable - A concatenation of relocatable objects
                  that can be executed by exec(2).  A  dynamic  executable  is
                  loaded  at  a  fixed  virtual  address space and is executed
                  under control of the runtime linker, ld.so.1(1), to  produce
                  a runtime process. Dynamic executables typically have one or
                  more dependencies in the form of shared objects.

                  A dynamic executable is created when the -z type=exec option
                  is  used,  or is the default when no other options that con‐
                  trol the output file type are provided.


           o      Kernel Module - A special case of a relocatable object, con‐
                  taining  dynamic  linking information, that can be loaded by
                  the operating system kernel. Kernel modules can have  depen‐
                  dencies on other kernel modules.

                  A  kernel  module is created when the -z type=kmod option is
                  used.


           o      Position-independent Executable (PIE) - A position  indepen‐
                  dent  form  of  a dynamic executable that can be executed by
                  exec(2). A position-independent executable is loaded  at  an
                  arbitrary  virtual  address space and is executed under con‐
                  trol of the runtime linker, ld.so.1(1), to produce a runtime
                  process. Position-independent executables typically have one
                  or more dependencies in the form of shared objects.

                  A  position-independent  executable  is  created  when   the
                  -z type=pie option is used.


           o      Relocatable  Object - A concatenation of relocatable objects
                  that can be used in subsequent link-edit phases.

                  A relocatable  object  is  created  when  the  -z type=reloc
                  option, or -r option are used.


           o      Shared  Object - A concatenation of relocatable objects that
                  provide services for other dynamic objects. A shared  object
                  is  loaded  at  an arbitrary virtual address space under the
                  control of the runtime linker, ld.so.1(1) and  is  bound  to
                  executables,  or  other  shared  objects, at runtime. Shared
                  objects can have dependencies on other shared objects.

                  A shared object is created when the  -z type=shared  option,
                  or -G option are used.


           o      Static  Executable  - A concatenation of relocatable objects
                  that can be executed directly by exec(2), without assistance
                  from the runtime linker, ld.so.1(1).

                  A  static  executable  is  created  when  the -z type=static
                  option or -a option are used. However,  modern  versions  of
                  the  Oracle Solaris operating system do not support the cre‐
                  ation of static executables. See Static Executables.



       All discussion in this section  assumes  the  construction  of  dynamic
       objects, relocatable objects, or kernel modules.


       The  dynamic  linking environment tightly couples the work of the link-
       editor and the runtime linker, ld.so.1(1). These utilities  are  exten‐
       sively documented in Oracle Solaris 11.4 Linkers and Libraries Guide.


       Dynamic  executables  and  position-independent executables are collec‐
       tively referred to as executables.  These  executables,  together  with
       shared objects, are collectively referred to as dynamic objects.


       Shared  objects  and relocatable archives, created with ar(1), are col‐
       lectively referred to as libraries. If any argument is a  library,  the
       link-editor  by default, searches the library exactly once at the point
       the library is encountered on the command line.


       A shared object consists of an indivisible, whole unit  that  has  been
       generated  by a previous link-edit of one or more input files. When the
       link-editor processes a shared  object,  the  entire  contents  of  the
       shared object become a logical part of the resulting output file image.
       The shared object is not physically copied during the link-edit as  its
       actual  inclusion  is  deferred  until  process execution. This logical
       inclusion means that all symbol entries defined in  the  shared  object
       are  made  available to the link-editing process. See Chapter 4, Shared
       Objects in Oracle Solaris 11.4 Linkers and Libraries Guide.


       For an archive library, the link-editor, by default, loads  only  those
       archive members that define an unresolved external reference. The link-
       editor searches the symbol table of the archive library sequentially to
       resolve  external  references that can be satisfied by archive members.
       This search is repeated until no external references can be resolved by
       the  archive. Thus, the order of members in the library is functionally
       unimportant, unless multiple archive members exist that define the same
       external  symbol.  See also the -z allextract option. Archive libraries
       that have interdependencies can require multiple command  line  defini‐
       tions, or the use of one of the -z rescan options. See Archive Process‐
       ing in Oracle Solaris 11.4 Linkers and Libraries Guide.


       The link-editor is a cross link-editor, able to link 32-bit objects  or
       64-bit  objects, for SPARC or x86 targets. The link-editor uses the ELF
       class and machine type of the first relocatable object on  the  command
       line  to  govern  the  mode  in  which to operate. The mixing of 32-bit
       objects and 64-bit objects is not permitted. Similarly, only objects of
       a  single  machine  type  are  allowed.  See the -32, -64 and -z target
       options.


       To provide for efficient arbitrary virtual address space mapping, posi‐
       tion-independent  executables and shared objects should be created from
       position-independent code (PIC). See the -z text option.

   Static Executables
       The creation of  static  executables  has  been  discouraged  for  many
       releases. In fact, 64-bit system archive libraries have never been pro‐
       vided with Solaris. Because a static executable is built against system
       archive   libraries,  the  executable  contains  system  implementation
       details. This self-containment has a number of drawbacks.

           o      The executable is immune to the benefits of  system  patches
                  delivered  as shared objects. The executable therefore, must
                  be rebuilt to take advantage of many system improvements.


           o      The ability of the executable to run on future releases  can
                  be compromised.


           o      The  duplication of system implementation details negatively
                  affects system performance.



       Starting with Oracle Solaris 10, 32-bit system archive libraries are no
       longer provided. Without these libraries, specifically libc.a, the cre‐
       ation of static executables is no longer achievable without  access  to
       undocumented  and changeable system details. However, the capability of
       the link-editor to process static linking options, and  the  processing
       of archive libraries, remains unchanged.

   Option Processing
       Typically,  link  edits  are  completely  specified  using command line
       options. In addition, a variety of environment variables  are  provided
       to augment command line processing. These variables provide for supply‐
       ing options that might clash with  compiler  options.  These  variables
       also  provide  for  overriding,  or unsetting, the command line options
       that are embedded in scripts and build environments.


       Any inconsistencies between command line  options  result  in  a  fatal
       error condition. Any inconsistencies that involve an option provided by
       an environment variable result in a warning, and the first option  tak‐
       ing precedence.


       Initial options are processed from the LD_OPTIONS environment variable,
       followed by the command line,  followed  by  the  LD_UNSET  environment
       variable.


       From these three components, the initial object type of the output file
       being created, is determined. This object type is then used to investi‐
       gate  any LD_{object-type}_UNSET, and LD_{object-type}_OPTIONS environ‐
       ment variables. These variables can remove, or add, options specific to
       the object type being built.


       The  object-type  corresponds  to  the  values  accepted by the -z type
       option, in uppercase, and is one of EXEC, KMOD, PIE, RELOC  or  SHARED.
       For  example,  the  LD_EXEC_OPTIONS environment variable is interpreted
       when the object type is a dynamic executable.


       If an LD_{object-type}_OPTIONS exists, the variable is  first  searched
       to discover whether a -z type option is specified. This search provides
       a final chance to affect the object type of the output file being  cre‐
       ated.


       The  object type is now finalized, and the associated environment vari‐
       ables for this final object type are processed. Note that  these  vari‐
       ables can not change the object type or class.


       Option processing can be summarized by the following order.

           o      From the LD_OPTIONS environment variable.


           o      From the command line.


           o      From the LD_UNSET environment variable.


           o      From  the  LD_{object-type}_OPTIONS  environment  variable -
                  searched only for a -z type option.


           o      From the LD_{object-type}_UNSET environment variable.


           o      From the LD_{object-type}_OPTIONS environment variable.



       The following example executes a build process where all  objects  cre‐
       ated  by the link-editor have guidance enabled. Any dynamic executables
       become position-independent executables, and have a number of  security
       extensions enabled. Any shared objects are ensured to contain position-
       independent code and have all their dependencies defined.

         $ LD_OPTIONS=-zguidance  \
           LD_EXEC_OPTIONS=-ztype=pie  \
           LD_PIE_OPTIONS=-zsx=aslr,nxheap,nxstack  \
           LD_SHARED_OPTIONS="-ztext -zdefs"  <build process>



       Any command line options that are inconsistent with this output  object
       type  result  in  a fatal error condition. Any inconsistent option pro‐
       vided by an environment variable results in a warning, and  the  option
       being ignored.


       Any  UNSET  operation  is  accompanied with a warning notification. Any
       other option processing warnings can be promoted to a fatal error  con‐
       dition by setting the -z fatal-warnings option.

OPTIONS
       The following options are supported.

       -32 | -64
       -m32 | -m64

           Create a 32-bit, or 64-bit object.

           By  default,  the class of the object being generated is determined
           from the first ELF object processed from the command  line.  If  no
           objects  are specified, the class is determined by the first object
           encountered within the first archive  processed  from  the  command
           line.  If there are no objects or archives, the link-editor creates
           a 32-bit object.

           The -64 option is required to create a 64-bit object solely from  a
           mapfile.

           The -32 or -64 options can also be used in the rare case of linking
           entirely from an archive that contains a mixture of 32  and  64-bit
           objects. If the first object in the archive is not the class of the
           object that is required to be created, then the -32 or  -64  option
           can be used to direct the link-editor.



       -B direct | nodirect

           These  options  govern  direct binding. The -B direct option estab‐
           lishes direct binding information  by  recording  the  relationship
           between  a  symbol  reference  and the dependency that provides the
           symbol definition. In addition, direct binding information  can  be
           established between a symbol reference and an associated definition
           within the object being  created.  The  runtime  linker  uses  this
           information  to  search  directly  for  a  symbol in the associated
           object rather than to carry out a default symbol search.

           Direct binding information can only be established to  dependencies
           specified  with the link-edit. Thus, the -z defs option should also
           be added. Objects that wish to interpose on  symbols  in  a  direct
           binding  environment should identify themselves as interposers with
           the -z interpose option. The use of -B direct also enables -z lazy‐
           load for all dependencies.

           The  -B nodirect  option  prevents any direct binding to the inter‐
           faces offered by the object being created. The object being created
           can  continue to directly bind to external interfaces by specifying
           the -z direct option. See Chapter  7,  Direct  Bindings  in  Oracle
           Solaris 11.4 Linkers and Libraries Guide.


       -B dynamic | static

           These  options  govern  library  inclusion.  The  -B dynamic option
           allows a -l option library search to expand to a shared object  and
           an  archive library name. This option is valid, and the default, in
           dynamic mode only. -B static restricts a -l option  library  search
           to expand to archive library names only. These options can be spec‐
           ified any number of times on the command line as  toggles.  If  the
           -B static  option  is  given,  no shared objects are accepted until
           -B dynamic is seen. See the -l option.


       -B eliminate[=mode] | local[=mode]

           Causes any symbols that default to global binding, to be eliminated
           from  the  symbol  table,  or reduced to local visibility. A global
           symbol that has a STV_DEFAULT visibility, can be reduced to a  more
           restrictive visibility by the link-editor. A global symbol that has
           any other STV_ visibility is considered to have an  explicit  visi‐
           bility.  An  explicit visibility is honored by the link-editor, and
           can not be modified. See Symbol Visibility in Oracle  Solaris  11.4
           Linkers and Libraries Guide. A symbols visibility can be explicitly
           defined through  compiler  directives,  or  through  mapfiles  that
           define version or interface definitions.

           Mapfile version and interface definitions can contain auto-elimina‐
           tion or auto-reduction directives. See SYMBOL_SCOPE and SYMBOL_VER‐
           SION Directives in Oracle Solaris 11.4 Linkers and Libraries Guide.
           These directives result in symbols that are not explicitly  defined
           in a mapfile, or do not define an explicit visibility, to be elimi‐
           nated or reduced to local, respectively. Besides any explicit  sym‐
           bol  definitions,  symbol  elimination  or  reduction  can  also be
           affected by the type of object being produced, as described in  the
           paragraphs  that  follow. The -B eliminate option requests the same
           symbol elimination as the mapfile  auto-elimination directive.  The
           -B local  option  requests the same symbol reduction as the mapfile
           auto-reduction directive.

           Either option can be qualified with a mode, external,  or  noexter‐
           nal,  to control the selection of eliminated or reduced global sym‐
           bols. This fine-tuning is usually unnecessary, as  the  link-editor
           defaults  to the appropriate mode for the type of object being pro‐
           duced, external for executables, and noexternal for shared objects.

           When building a dynamic object, it can be necessary to ensure  that
           some  symbols  remain  global  so  that they can be referenced from
           external dependencies. This is particularly true  for  executables.
           When building an executable, relocatable objects are contributed by
           the compilation environment that provide for runtime  process  ini‐
           tialization.  These  relocatable objects can contain global symbols
           that are referenced from system dependencies. These symbols  should
           remain  global regardless of any auto-elimination or auto-reduction
           symbol techniques, so as not to compromise runtime execution.

           Defining the mode as external results in the analysis of any exter‐
           nal  dependencies  to  determine  if  any symbol reference from the
           dependency might bind to a  symbol  definition  within  the  object
           being built. Any global symbol that satisfies such a binding is not
           eliminated or reduced to local. This mode is the default when  pro‐
           ducing an executable.

           Defining  the  mode  as  noexternal circumvents the analysis of any
           external dependencies, and results in the reduction of all  symbols
           that  are  not explicitly defined in a mapfile, or do not define an
           explicit visibility. This mode is  the  default  when  producing  a
           shared object.

           See also the -B reduce option.


       -B reduce

           When  generating a relocatable object, causes the reduction of sym‐
           bolic information defined by any symbol  visibility  attribute,  or
           through  mapfiles  that define version or interface definitions. By
           default,  when  a  relocatable  object  is  generated,   visibility
           attributes,  version definitions, or interface definitions are only
           recorded in the output image.  Visibility  attributes,  or  mapfile
           version  or  interface  definitions, are always applied to any sym‐
           bolic information when creating a dynamic object or kernel module.


       -c name

           Records the configuration file name for use at runtime.  Configura‐
           tion files can be employed to alter default search paths, provide a
           directory cache, together with providing alternative object  depen‐
           dencies. See crle(1). This option is only available when creating a
           dynamic executable or position-independent executable.


       -C

           Demangles C++ symbol names displayed in diagnostic messages.


       -D [!]token1,[!]token2,...

           Prints debugging information as specified by each token.  The  spe‐
           cial  token  help  indicates the full list of tokens available. See
           Debugging Aids in Oracle Solaris 11.4 Linkers and Libraries  Guide.
           If  the  special  token help is specified by itself, output goes to
           the standard output. If any other tokens are specified, output goes
           to the standard error.


       -e epsym
       --entry epsym

           Sets  the  entry point address for the output file to be the symbol
           epsym.



       -f name
       --auxiliary name

           Used only when building a shared object. Specifies that the  symbol
           table  of  the  shared object is used as an auxiliary filter on the
           symbol table of the  shared  object  specified  by  name.  Multiple
           instances  of  this option are allowed. This option can not be com‐
           bined with the -F option. See Generating Auxiliary Filters in  Ora‐
           cle Solaris 11.4 Linkers and Libraries Guide.



       -F name
       --filter name

           Used  only when building a shared object. Specifies that the symbol
           table of the shared object is used as a filter on the symbol  table
           of  the shared object specified by name. Multiple instances of this
           option are allowed. This option can not be  combined  with  the  -f
           option.  See  Generating  Standard  Filters  in Oracle Solaris 11.4
           Linkers and Libraries Guide.



       -G
       -shared

           In dynamic mode only, produces a shared object.  Undefined  symbols
           are  allowed.  See  also  the -z type=shared option. See Chapter 4,
           Shared Objects in Oracle Solaris 11.4 Linkers and Libraries Guide.



       -h name
       -soname name

           In dynamic mode only, when building a shared object or kernel  mod‐
           ule, records name in the object's dynamic section. name is recorded
           in any dynamic objects that are linked with this object rather than
           the  object's  file  system  name. Accordingly, name is used by the
           runtime linker or kernel runtime linker respectively, as  the  name
           of  the  shared  object  to  search for at runtime. See Recording a
           Shared Object Name in Oracle Solaris  11.4  Linkers  and  Libraries
           Guide.



       -i

           Ignores   LD_LIBRARY_PATH.   This   option   is   useful   when  an
           LD_LIBRARY_PATH setting is  in  effect  to  influence  the  runtime
           library  search,  which would interfere with the link-editing being
           performed.


       -l x
       --library x

           When building a dynamic  object,  searches  a  library  libx.so  or
           libx.a,  the  conventional  names for shared object and relocatable
           archives, respectively.  In  dynamic  mode,  unless  the  -B static
           option is in effect, the link-editor searches each directory speci‐
           fied in the library search path for a libx.so or libx.a  file.  The
           directory  search  stops  at the first directory containing either.
           The link-editor chooses the file ending in .so if  -lx  expands  to
           two  files with names of the form libx.so and libx.a. If no libx.so
           is found, then the link-editor accepts libx.a. In static  mode,  or
           when  the  -B static  option  is in effect, the link-editor selects
           only the file ending in .a.

           When building a kernel module, searches  for  a  dependency  kernel
           module  x. The dependency can be specified as a single name x or as
           a slash delimited interface/module pair.

           The link-editor searches a library when the library is encountered,
           so  the placement of -l is significant. See Linking With Additional
           Libraries in Oracle Solaris 11.4 Linkers and Libraries Guide.



       -L path
       --library-path path

           Adds path  to  the  library  search  directories.  The  link-editor
           searches for libraries first in any directories specified by the -L
           options and then in the standard directories. This option is useful
           only  if  the option precedes the -l options to which the -L option
           applies. See Directories Searched  by  the  Link-Editor  in  Oracle
           Solaris 11.4 Linkers and Libraries Guide.

           The  environment variable LD_LIBRARY_PATH can be used to supplement
           the library search path, however the -L option is  recommended,  as
           the  environment  variable is also interpreted by the runtime envi‐
           ronment. See LD_LIBRARY_PATH under ENVIRONMENT VARIABLES.

           If path starts with  the  prefix  $SYSROOT/,  then  the  prefix  is
           replaced  by  the  sysroot  directory  specified  by the -z sysroot
           option, or with / if -z sysroot is not used. For compatibility with
           GNU  link-editors, the prefix =/ is also accepted, and has the same
           meaning as a $SYSROOT/ prefix. The use  of  a  sysroot  prefix  can
           allow  a  single  -L  definition  to work for both native and cross
           linking applications.



       -m

           Produces a memory map or  listing  of  the  input/output  sections,
           together  with any non-fatal multiply-defined symbols, on the stan‐
           dard output.


       -M mapfile

           Reads mapfile as a text file of directives to the link-editor. This
           option  can be specified multiple times. If mapfile is a directory,
           then all regular files, as defined by stat(2), within the directory
           are  processed. See Chapter 10, Mapfiles in the Link-Editor in Ora‐
           cle Solaris 11.4 Linkers and Libraries Guide. Example mapfiles  are
           provided in /usr/lib/ld. See also FILES.


       -o outfile
       --output outfile

           Produces  an  output object file that is named outfile. The name of
           the default object file is a.out.



       -p auditlib

           Identifies an audit library, auditlib. This audit library  is  used
           to audit the object being created at runtime. A shared object iden‐
           tified as requiring auditing with the -p option, has this  require‐
           ment  inherited by any object that specifies the shared object as a
           dependency. See the -P option. See  also  Runtime  Linker  Auditing
           Interface in Oracle Solaris 11.4 Linkers and Libraries Guide.


       -P auditlib

           Identifies  an  audit library, auditlib. This audit library is used
           to audit the dependencies of the object being created  at  runtime.
           Dependency  auditing  can  also be inherited from dependencies that
           are identified as requiring auditing. See the -p  option,  and  the
           -z globalaudit  option.  See also Runtime Linker Auditing Interface
           in Oracle Solaris 11.4 Linkers and Libraries Guide.


       -Q y | n

           Under -Q  y, an ident string is added to the  .comment  section  of
           the  output  file.  This string identifies the version of the link-
           editor used to create the file. This results in multiple  link-edi‐
           tor  idents  when  there  have been multiple linking steps, such as
           when using the link-editor -z type=reloc or -r options. This  iden‐
           tification  is identical with the default action of the cc command.
           The -Q n option suppresses version  identification.  .comment  sec‐
           tions can be manipulated by the mcs(1) utility.


       -r
       --relocatable

           Combines  relocatable  objects  to  produce  one relocatable object
           file. The link-editor does not  complain  about  unresolved  refer‐
           ences.  This option cannot be used with the -a option. See also the
           -z type=reloc option.



       -R path
       -rpath path

           A colon-separated list  of  directories  used  to  specify  library
           search  directories to the runtime linker. If present and not NULL,
           the path is recorded in the output object file and used by the run‐
           time  linker.  Multiple  instances  of this option are concatenated
           together with each path  separated  by  a  colon.  See  Directories
           Searched  by  the Runtime Linker in Oracle Solaris 11.4 Linkers and
           Libraries Guide.

           The use of a runpath within an associated object is  preferable  to
           setting  global  search  paths  such as through the LD_LIBRARY_PATH
           environment variable. Only the runpaths that are necessary to  find
           the  objects  dependencies  should  be recorded. ldd(1) can also be
           used to discover unused runpaths in dynamic objects, when used with
           the -U option.

           Various  tokens  can also be supplied with a runpath that provide a
           flexible means of identifying system  capabilities  or  an  objects
           location.  See  Chapter  12, Establishing Dependencies with Dynamic
           String Tokens in Oracle Solaris 11.4 Linkers and  Libraries  Guide.
           The  $ORIGIN token is especially useful in allowing dynamic objects
           to be relocated to different locations in the file system.



       -s
       --strip-all

           Strip any symbolic information from the output file. These  options
           are  equivalent  to  using the -z strip-class option with the debug
           and symbol class identifiers. See also the -z redlocsym and -z nol‐
           dynsym options.



       -S supportlib

           The  shared  object  supportlib  is loaded with the link-editor and
           given information regarding the  linking  process.  Shared  objects
           that  are defined by using the -S option can also be supplied using
           the  SGS_SUPPORT  environment  variable.  See  Link-Editor  Support
           Interface in Oracle Solaris 11.4 Linkers and Libraries Guide.


       -u symname
       --undefined symname

           Enters  symname  as  an  undefined symbol in the symbol table. This
           option is useful for loading entirely from an archive  library.  In
           this instance, an unresolved reference is needed to force the load‐
           ing of the first routine. The placement of this option on the  com‐
           mand  line  is  significant.  This option must be placed before the
           library that defines the symbol. See  Defining  Additional  Symbols
           with  the  -u  option  in Oracle Solaris 11.4 Linkers and Libraries
           Guide.



       -V
       --version

           Outputs a message giving information about the version of the link-
           editor being used.



       -z allextract | defaultextract | weakextract
       --whole-archive | --no-whole-archive

           Alters  the  extraction  criteria of objects from any archives that
           follow. By default, archive members are extracted to satisfy  unde‐
           fined  references  and  to  promote tentative definitions with data
           definitions. Weak symbol  references  do  not  trigger  extraction.
           Under  the  -z allextract  or  --whole-archive options, all archive
           members are extracted from the archive. Under -z weakextract,  weak
           references  trigger  archive  extraction.  The -z defaultextract or
           --no-whole-archive options provide a  means  of  returning  to  the
           default  following  use  of the former extract options. See Archive
           Processing in Oracle Solaris 11.4 Linkers and Libraries Guide.



       -z ancillary[=outfile]

           Specifies an ancillary output file, which  will  receive  any  non-
           allocable  sections  that  would  normally  be  added to the output
           object. Non-allocable sections are not required at runtime, and are
           primarily  for  use  by debuggers and other observability tools. If
           outfile is present, the ancillary file is created  with  the  given
           name.  If  outfile  is not present, the ancillary file is given the
           same name as the primary output file with the addition  of  a  .anc
           suffix.  See  Ancillary  Objects in Oracle Solaris 11.4 Linkers and
           Libraries Guide.

           The -z ancillary option is quietly ignored if used  in  conjunction
           with the -z stub option. The -z ancillary option is also ignored if
           specified without outfile, and the output file specified via the -o
           option is a device special file such as /dev/null.


       -z assert-deflib[=libname]

           Enables  warning  messages for libraries specified with the -l com‐
           mand line option that are found by  examining  the  default  search
           paths  provided by the link-editor. If a libname value is provided,
           the default library warning feature is enabled, and  the  specified
           library  is added to a list of libraries for which no warnings will
           be issued. Multiple -z assert-deflib options can  be  specified  in
           order  to  specify multiple libraries for which warnings should not
           be issued.

           The libname value should be the name of the library file, as  found
           by  the  link-editor, without any path components. For example, the
           following enables default library warnings, and excludes the  stan‐
           dard C library.


             $ ld ... -z assert-deflib=libc.so ...

           -z assert-deflib  is a specialized option, primarily of interest in
           build environments where multiple objects with the same name  exist
           and tight control over the library used is required. This option is
           not intended for general use.


       -z compress-sections[=cmp-type]
       --compress-debug-sections cmp-type

           Enables the compression of annotate and debug output sections.  The
           following values for cmp-type are recognized.


           none

               No  compression  is  done. This is equivalent to not specifying
               the -z compress-sections option.


           zlib

               Compress candidate sections using ZLIB compression. The result‐
               ing  output  sections will have the SHF_COMPRESSED section flag
               set to identify the use of compression.


           zlib-gnu

               Compress all candidate sections using ZLIB  compression,  using
               the GNU section compression format. This format requires candi‐
               date sections to have a  name  that  begins  with  .debug.  The
               resulting  sections  are renamed to start with .zdebug to iden‐
               tify the use of compression.

           If cmp-type is omitted, the zlib style  is  used.  The  link-editor
           will  quietly skip compression for any section that would be larger
           in compressed form than the original non-compressed data.

           To be a candidate for compression, a section must be non-allocable,
           and belong to one of the following classes.


           annotate

               Annotate  sections  provide  information that is used by memory
               access tools, and coverage related tools.  These  sections  are
               identified by having a SHT_SUNW_ANNOTATE section type.


           debug

               Debug  sections  are  identified by having a .compcom, .debug*,
               .line, .stab*, .SUNW_ctf, or .zdebug* section name. These  sec‐
               tions   are  also  identified  by  having  an  SHT_PROGBITS  or
               SHT_SUNW_DEBUG* section type.

           The zlib-gnu compression type is limited to sections  with  a  name
           that starts with .debug. When zlib-gnu is used, sections that would
           otherwise be candidates for compression  are  not  compressed.  The
           underlying  ZLIB compression is identical for the zlib and zlib-gnu
           styles, and both formats deliver the same amount of compression for
           a  given  input  section. The two styles differ in the selection of
           candidate sections, the format of the compression  header,  and  in
           how  compressed  sections are identified. See Compressed Debug Sec‐
           tions in Oracle Solaris 11.4 Linkers and  Libraries  Guide.  Unless
           there is a specific requirement to use the zlib-gnu style, the more
           general default zlib style is recommended.



       -z deferred | nodeferred

           Enables or disables the identification of dynamic  dependencies  as
           deferred.  Symbol references that bind to a deferred dependency are
           termed deferred references. Deferred dependencies behave  similarly
           to  dependencies identified as lazy loadable, and are not loaded at
           initial process start-up. The loading of deferred  dependencies  is
           delayed  until  process  execution,  when  the  first  binding to a
           deferred reference is made.

           Unlike standard symbol references, deferred symbol  references  are
           not  processed  as  part  of  standard  relocation  processing,  or
           LD_BIND_NOW processing, or through  dlopen(3C)  with  the  RTLD_NOW
           flag.  Deferred  references  can  only  be established for function
           calls, and are bound directly to the associated dependency.

           The use of deferred dependencies, together with dlsym(3C)  and  the
           RTLD_PROBE  handle, provides a flexible mechanism, and natural cod‐
           ing style, for testing for functionality. See Testing for Function‐
           ality  in Oracle Solaris 11.4 Linkers and Libraries Guide, and Pro‐
           viding an Alternative to dlopen in Oracle Solaris 11.4 Linkers  and
           Libraries Guide.


       -z defs | nodefs
       --no-undefined

           The  -z defs  option  and  the  --no-undefined option force a fatal
           error if any undefined symbols remain at the end of the link.  This
           mode  is the default when an executable is built. For historic rea‐
           sons, this mode is not the default when building a  shared  object.
           Use  of the -z defs option is recommended, as this mode assures the
           object being built is self-contained. A self-contained  object  has
           all  symbolic  references  resolved  internally, or to the object's
           immediate dependencies.

           The -z nodefs option allows undefined symbols.  For  historic  rea‐
           sons,  this mode is the default when a shared object is built. When
           used with executables, the behavior of references to such undefined
           symbols  is  unspecified. Use of the -z nodefs option is not recom‐
           mended.



       -z direct | nodirect

           Enables or disables direct binding to any dependencies that  follow
           on  the command line. These options allow finer control over direct
           binding than the global counterpart -B direct. The -z direct option
           also  differs  from  the  -B direct  option in the following areas.
           Direct binding information is not established between a symbol ref‐
           erence  and  an  associated definition within the object being cre‐
           ated. Lazy loading is not enabled.


       -z discard-unused=item1,item2,...
       --gc_sections | --no-gc-sections

           By default, the link-editor discards unused, empty sections.  Other
           categories  of input material can be determined to be unused during
           the link-edit. The -z discard-unused option enables  the  automatic
           removal of such items. The following item tokens are recognized.


           sections

               Unused sections are discarded from the output file created from
               the link-edit.


           files

               Unused relocatable object files are discarded from  the  output
               file created from the link-edit.

               An  input relocatable object file is determined to be unused if
               all allocatable sections provided by the relocatable object are
               unused.  See  also  the "Non-Required Relocatable Object Files"
               discussion of the -z guidance option.


           dependencies

               Unused, explicit, shared object dependencies are  not  recorded
               in the output file created from the link-edit.

               An  explicit  dependency  is one that is defined on the command
               line, either using the path name, or more commonly by using the
               -l  option.  Explicit dependencies can depend on other objects,
               which are referred to as  implicit  dependencies.  An  explicit
               dependency  is  determined  to  be unused if two conditions are
               true.


                   o      No global symbols that are provided  by  the  depen‐
                          dency are referenced from the object being built.


                   o      The  dependency does not compensate for the require‐
                          ments of any implicit dependencies.

               See also the "Non-Required or Compensating  Dependencies"  dis‐
               cussion of the -z guidance option.


           none

               Disables all unused processing, including the default action of
               removing unused, empty sections.

           For compatibility with GNU link-editors, --gc-sections is  accepted
           as  a  synonym for -z discard-unused=sections. The --no-gc-sections
           option cancels a  previous  use  of  -z discard-unused=sections  or
           --gc-sections, and otherwise has no effect.

           See  also  Removing  Unused Material in Oracle Solaris 11.4 Linkers
           and Libraries Guide.



       -z endfiltee

           Identifies a filtee so that when processed by a filter, the  filtee
           terminates  any further filtee searches by the filter. See Reducing
           Capability Filtee Searches  in  Oracle  Solaris  11.4  Linkers  and
           Libraries Guide.


       -z fatal-warnings | nofatal-warnings
       --fatal-warnings | --no-fatal-warnings

           The  -z fatal-warnings  and  the  --fatal-warnings option cause the
           link-editor to treat warnings as fatal errors.

           The -z nofatal-warnings and the  --no-fatal-warnings  option  cause
           the link-editor to treat warnings as non-fatal. This is the default
           behavior.



       -z finiarray=function

           Appends an entry to the .fini_array section  of  the  object  being
           built.  If no .fini_array section is present, a section is created.
           The new entry is initialized to point to function. See  Initializa‐
           tion  and  Termination  Sections in Oracle Solaris 11.4 Linkers and
           Libraries Guide.


       -z globalaudit

           This option supplements an audit library definition that  has  been
           recorded  with  the  -P  option. This option is only available when
           creating executables. Audit libraries that are  defined  within  an
           object  with  the -P option typically allow for the auditing of the
           immediate dependencies of the object. The  -z globalaudit  promotes
           the  auditor to a global auditor, thus allowing the auditing of all
           dependencies. See Invoking the Auditing Interface in Oracle Solaris
           11.4 Linkers and Libraries Guide.

           An  auditor  established  with the -P option and the -z globalaudit
           option, is equivalent to the auditor  being  established  with  the
           LD_AUDIT environment variable. See ld.so.1(1).


       -z guidance[=item1,item2,...]

           Provide  guidance  messages to suggest the link-editor options that
           can improve the quality of the resulting object, or which are  oth‐
           erwise  considered  to be beneficial. The specific guidance offered
           is subject to change over time  as  the  system  evolves.  Obsolete
           guidance  offered  by  older  versions  of  the  link-editor may be
           dropped in new versions. Similarly, new guidance may  be  added  to
           new  versions  of the link-editor. Guidance therefore always repre‐
           sents current best practices.

           It is possible to enable guidance, while preventing specific  guid‐
           ance messages, by providing a list of item tokens, representing the
           class of guidance to be suppressed. In this  way,  unwanted  advice
           can  be  suppressed  without  losing the benefit of other guidance.
           Unrecognized item tokens are quietly ignored  by  the  link-editor,
           allowing  a given command line to be executed on a variety of older
           or newer versions of Solaris.

           The guidance offered by the current version of the link-editor, and
           the item tokens used to disable these messages, are as follows.


           Specify Required Dependencies

               Dynamic objects and kernel modules should explicitly define all
               of the dependencies they require. Guidance recommends  the  use
               of  the  -z defs  option,  should  any symbol references remain
               unsatisfied when building these objects. This guidance  can  be
               disabled with -z guidance=nodefs.


           Do Not Specify Non-Required or Compensating Dependencies

               Dynamic  objects  and  kernel  modules  should  not  define any
               explicit dependencies that do not satisfy the symbol references
               made  by  the object. Guidance recommends that non-required, or
               unused dependencies, be removed. Unused dependencies, can  fall
               into one of two categories.


                   o      Explicit  dependencies that satisfy no symbol refer‐
                          ences.


                   o      Explicit dependencies that satisfy no symbol  refer‐
                          ences  from the dynamic object being built, but that
                          compensate  for  implicit  dependencies.   See   the
                          "dependencies"  discussion  of the -z discard-unused
                          option.

               Guidance for both of these  categories  can  be  disabled  with
               -z guidance=nounused-dependencies,   or  the  synonym  -z guid‐
               ance=nounused. Guidance for compensating  dependencies  can  be
               disabled with -z guidance=nounused-compensators.

               See  also Removing Unused Material in Oracle Solaris 11.4 Link‐
               ers and Libraries Guide.


           Do Not Specify Non-Required Relocatable Object Files

               The output file being created should not contain  any  informa‐
               tion  from  a relocatable object whose allocatable sections are
               not referenced by any other objects  involved  with  the  link-
               edit.  Guidance  recommends  that unused relocatable objects be
               removed.  This  guidance  can   be   disabled   with   -z guid‐
               ance=nounused-files.

               See  also Removing Unused Material in Oracle Solaris 11.4 Link‐
               ers and Libraries Guide.


           Lazy Loading

               Shared object dependencies should be identified for lazy  load‐
               ing.  Guidance  recommends  the  use  of the -z lazyload option
               should any dependency be processed before either a  -z lazyload
               or  -z nolazyload  option  is encountered. This guidance can be
               disabled with -z guidance=nolazyload.


           Direct Bindings

               Dependencies of  dynamic  objects  should  be  referenced  with
               direct  bindings. Guidance recommends the use of the -B direct,
               or -z direct options should any dependency be processed  before
               either  of  these options, or the -z nodirect option is encoun‐
               tered. This guidance can be disabled with -z guidance=nodirect.


           Pure Text Segment

               Dynamic objects should not contain relocations to non-writable,
               allocable sections. If such relocations exist, and provided the
               -z textoff option is not in use, guidance is offered.

               When creating shared objects and position-independent  executa‐
               bles, this condition typically arises when input files contain‐
               ing non-position  independent  code  are  used.  When  creating
               dynamic executables, this condition typically arises when unre‐
               solved weak references exist. This  guidance  can  be  disabled
               with -z guidance=notext.


           Mapfile Syntax

               All  mapfiles should use the version 2 mapfile syntax. Guidance
               recommends the use of the version 2 syntax should any  mapfiles
               be encountered that use the version 1 syntax. This guidance can
               be disabled with -z guidance=nomapfile.


           Mapfile Symbol Matching

               Mapfiles should refrain from  using  MATCH  expressions  within
               named  versions when those versions are intended to establish a
               long lived and stable ABI. Guidance recommends that all  symbol
               names in named versions be listed explicitly. This guidance can
               be disabled with -z guidance=nomapfile-symbol-match.


           Library Search Path

               Inappropriate dependencies that are encountered  by  the  link-
               editor  are  quietly  ignored. For example, a 32-bit dependency
               that is encountered when generating a 64-bit object is ignored.
               These  dependencies  can result from incorrect search path set‐
               tings, such as  supplying  an  incorrect  -L  option.  Although
               benign,  this dependency processing is wasteful, and might hide
               a build problem that should be solved. Guidance recommends  the
               removal of any inappropriate dependencies. This guidance can be
               disabled with -z guidance=nolibpath.


           Specify Kernel Modules Explicitly

               Kernel modules should be built using the  -z type=kmod  option.
               Historically,  kernel  modules were built using the link-editor
               -r and -dy options. This older  form  is  ambiguous,  and  less
               capable. This guidance can be disabled with -z guidance=nokmod.


           Avoid Aliased Symbols

               Dynamic  objects  are  built  with symbol sort sections used by
               debuggers and other  observability  tools  to  efficiently  map
               addresses  to symbol names. Such tools can display inconsistent
               results when multiple symbols with the same value are  present.
               Aliased  symbols  can  be  avoided by revising the code, or the
               NOSORTSYM  mapfile directive can be used  to  manually  prevent
               unwanted  aliases  from  being placed in the sort section. This
               guidance can be disabled with -z guidance=nosymalias.

           In addition, -z guidance=noall can be used to entirely disable  the
           guidance  feature.  See  Chapter  5, Link-Editor Quick Reference in
           Oracle Solaris 11.4 Linkers and Libraries Guide for  more  informa‐
           tion on guidance and advice for building better objects.


       -z help
       --help
       -?

           Print  a summary of the command line options on the standard output
           and exit.




       -z ignore | record
       --as-needed | --no-as-needed

           Ignores, or records, shared object dependencies that are not refer‐
           enced  as  part  of  the  link-edit.  These  options are positional
           options, used to toggle how the  link-editor  handles  unreferenced
           dependencies  encountered  on  the  command line. When -z ignore is
           encountered, any subsequent unreferenced dependencies  are  quietly
           ignored.  When  -z record  is  encountered,  all  dependencies  are
           recorded without regard to whether the dependency is referenced  or
           not.

           By default, the link-editor records all dependencies whether or not
           the  dependency  is  referenced.  The  non-positional   -z discard-
           unused=dependencies  option  can  be  used  to  alter  this initial
           default. Once the initial setting  is  established,  -z ignore  and
           -z record can be used to alter the default behavior.



       -z initarray=function

           Appends  an  entry  to  the .init_array section of the object being
           built. If no .init_array section is present, a section is  created.
           The  new entry is initialized to point to function. See Initializa‐
           tion and Termination Sections in Oracle Solaris  11.4  Linkers  and
           Libraries Guide.


       -z initfirst

           Identifies  the  object  so  that its runtime initialization occurs
           before the runtime initialization of any other objects brought into
           the  process  at  the  same  time.  In addition, the object runtime
           finalization occurs after the runtime  finalization  of  any  other
           objects  removed  from the process at the same time. This option is
           only meaningful when building a shared object.


       -z interpose

           Identifies the object as an interposer. At runtime,  an  object  is
           identified  as an explicit interposer if the object has been tagged
           using the -z interpose  option.  An  explicit  interposer  is  also
           established  when an object is loaded using the LD_PRELOAD environ‐
           ment variable. See ld.so.1(1).  Implicit  interposition  can  occur
           because of the load order of objects, however, this implicit inter‐
           position is unknown to the runtime linker.  Explicit  interposition
           can  ensure  that interposition takes place regardless of the order
           in which objects are loaded. Explicit  interposition  also  ensures
           that the runtime linker searches for symbols in any explicit inter‐
           posers when direct bindings are in effect.


       -z lazyload | nolazyload

           Enables or disables the identification of dynamic  dependencies  to
           be lazily loaded. Dynamic dependencies that are identified as lazy‐
           load are not loaded at initial process start-up. These dependencies
           are delayed until the first binding to the object is made.

           Note -



             Lazy  loading  requires  the correct declaration of dependencies,
             together with associated runpaths for each  dynamic  object  used
             within  a  process.  See  Lazy Loading of Dynamic Dependencies in
             Oracle Solaris 11.4 Linkers and Libraries Guide.



       -z ld32=arg1,arg2,...
       -z ld64=arg1,arg2,...

           The -z 32 and -z 64 options are used to specify  options  that  are
           only  interpreted  when  running  the 32-bit or 64-bit class of the
           link-editor, respectively.

           For example, support libraries are class specific, so  the  correct
           class of support library can be ensured using:


             $ ld ... -z ld32=-Saudit32.so.1 -z ld64=-Saudit64.so.1 ...

           Prior  to  Oracle  Solaris  11.4, the class of link-editor that was
           executed was determined by the class of the ELF object  being  cre‐
           ated.  Now, the class of the link-editor that is executed is always
           64-bit. These options are  maintained  for  backward  compatibility
           with older versions of Solaris.



       -z loadfltr

           Identifies  a  filter  to  indicate  that filtees must be processed
           immediately at runtime.  Normally,  filter  processing  is  delayed
           until  a  symbol reference is bound to the filter. The runtime pro‐
           cessing of an object that contains  this  flag  mimics  that  which
           occurs  if  the  LD_LOADFLTR environment variable is in effect. See
           ld.so.1(1).


       -z mapfile-add=name

           Adds name to the list of known mapfile conditional input expression
           predicates.  This  option  is  equivalent  to placing the following
           lines at the top of the first mapfile read by the link-editor.


             $mapfile_version 2
             $add name

           Names entered via -z mapfile-add can be used with mapfile  $if  and
           $elif  directives to conditionally process mapfile input. See Chap‐
           ter 10, Mapfiles in the Link-Editor in Oracle Solaris 11.4  Linkers
           and Libraries Guide.


       -z nodelete

           Identifies  the  object  as  non-deletable at runtime. This mode is
           similar to adding the object to the  process  by  using  dlopen(3C)
           with the RTLD_NODELETE mode.


       -z nodlopen

           Identifies the object as not available to dlopen(3C), either as the
           object specified by the dlopen(), or  as  any  form  of  dependency
           required  by  the  object specified by the dlopen(). This option is
           only meaningful when building a shared object.


       -z parent=object

           Specifies a parent object, which can be a  dynamic  object  against
           which to link the output object. This option is typically used when
           creating plugin shared objects intended to be  loaded  by  an  exe‐
           cutable at runtime via the dlopen() function. The symbol table from
           the parent object is used to satisfy  references  from  the  plugin
           object.  See  Parent  Objects  in  Oracle  Solaris 11.4 Linkers and
           Libraries Guide.


       -z preinitarray=function

           Appends an entry to the .preinit_array section of the object  being
           built.  If  no .preinit_array section is present, a section is cre‐
           ated. The new entry is initialized to point to function.  See  Ini‐
           tialization and Termination Sections in Oracle Solaris 11.4 Linkers
           and Libraries Guide.


       -z rescan-now

           These options rescan the archive files that  are  provided  to  the
           link-edit.  By default, archives are processed once as the archives
           appear on the command line. Archives are traditionally specified at
           the  end  of  the  command  line  so  that their symbol definitions
           resolve any preceding references. However, specifying archives mul‐
           tiple  times  to  satisfy their own interdependencies can be neces‐
           sary.

           -z rescan-now is a positional option, and is processed by the link-
           editor  immediately  when  encountered on the command line. All ar‐
           chives seen on the command line up to that  point  are  immediately
           reprocessed in an attempt to locate additional archive members that
           resolve symbol references.  This  archive  rescanning  is  repeated
           until  a  pass over the archives occurs in which no new members are
           extracted.


       -z rescan-start ... -z rescan-end
       --start-group ... --end-group
       -( ... -)

           Defines an archive rescan group. This is  a  positional  construct,
           and  is  processed by the link-editor immediately upon encountering
           the closing delimiter  option.  Archives  found  within  the  group
           delimiter  options  are  reprocessed  as  a  group in an attempt to
           locate additional archive members that resolve  symbol  references.
           This  archive rescanning is repeated until a pass over the archives
           On the occurs in which no new members are extracted. Archive rescan
           groups cannot be nested.




       -z strip-class=[!]class1,[!]class2,...

           Strip  a specific class of section from any input objects, prevent‐
           ing these sections from being added to the output file. This option
           provides fine grained control over the sections that can be omitted
           from the output file.

           The strip class descriptions that follow only apply to non-allocat‐
           able sections.

           Each  class  token can be prepended with a '!' to indicate that the
           class should not be removed. This definition  can  be  useful  when
           combined  with  the  nonalloc  class.  For example, using -z strip-
           class=nonalloc,!note removes all  non-allocatable  sections  except
           for the note section.

           Stripped  sections  are  completely removed from the output object.
           The use of the -z ancillary option alters this behavior with regard
           to  the  non-dynamic symbol table .symtab, and the sections related
           to it. By default, the symbol table is written to both the  primary
           and  ancillary objects. If stripped, the symbol table is written to
           the ancillary object only, and is identified as absent in the  pri‐
           mary  object. If .symtab is stripped from an object without the use
           of -z ancillary, the section is completely  removed  in  the  usual
           manner.

           The following classes of section can be defined.

           nonalloc

               Strip  any  non-allocatable section. These sections are identi‐
               fied as not including the SHF_ALLOC section  flag.  This  class
               encapsulates  all  of  the other classes, except for the symbol
               class. The nonalloc class is  often  sufficient  by  itself  to
               remove any unwanted sections.


           annotate

               Strip  any  annotation section. These sections provide informa‐
               tion that is used by memory access tools, and coverage  related
               tools. These sections are identified by having a SHT_SUNW_ANNO‐
               TATE section type.


           comment

               Strip any comment section. These  sections  are  identified  by
               having a .comment section name. Alternatively, the mcs(1) util‐
               ity is commonly used to manipulate comment sections.


           debug

               Strip sections commonly used to contain debugging  data.  These
               sections  are  identified  by having a .compcom, .line, .stab*,
               .debug*, or .zdebug* section  name.  These  sections  are  also
               identified by having a SHT_SUNW_DEBUG* section type.


           exclude

               Strip  any excludable section. These sections are identified by
               having a SHF_EXCLUDE section flag. This  class  can  be  useful
               when  creating  a relocatable object. By default, such sections
               are automatically excluded when a  dynamic  object,  or  kernel
               module,  is  created, and are retained when creating a relocat‐
               able object.


           note

               Strip any note section. These sections are identified by having
               a SHT_NOTE section type.


           symbol

               Strip  any  non-allocatable  symbol table and string table sec‐
               tions, providing the output file is not a  relocatable  object.
               These  sections  are  identified by having a SHT_SYMTAB section
               type. Any associated string table is also removed.



       -z stub

           Produces a stub shared object. A stub object is  a  shared  object,
           built entirely from mapfiles, that supplies the same linking inter‐
           face as the real object, while containing no  code  or  data.  Stub
           objects  cannot  be used at runtime. However, an application can be
           built against a stub object, where the  stub  object  provides  the
           real  object  name  to  be  used  at runtime, and then use the real
           object at runtime.

           Stub objects can only be produced for shared objects, and a mapfile
           defining  the  global  symbols to be exported must be supplied. The
           -z type=shared or -G option,  and  the  -M  options  are  therefore
           required  when  -z stub  is  used. When building a stub object, the
           link-editor ignores any object or library files  specified  on  the
           command  line,  and  these files need not exist in order to build a
           stub. Since the compilation step can be omitted,  and  because  the
           link-editor  has  relatively little work to do, stub objects can be
           built very quickly.

           See Stub Objects in Linkers and Libraries Guide.


       -z sx=extension[=mode],...

           Specify per-object security extensions. The mode value can  be  set
           to enable or disable. If mode is omitted, the extension is enabled.
           Multiple instances of this option are allowed. This option is  only
           available when creating executables. See sxadm(8).

           The following security extensions can be specified.

           aslr

               Specifies   the   Address  Space  Layout  Randomization  (ASLR)
               requirement for a process.


           nxheap

               Specifies a non-executable  heap  (NXHEAP)  requirement  for  a
               process.


           nxstack

               Specifies  a  non-executable  stack (NXSTACK) requirement for a
               process.


           adiheap

               Specifies an Application Data Integrity (ADI)  requirement  for
               memory allocators within a process.


           adistack

               Specifies  an Application Data Integrity (ADI) stack protection
               requirement for a process.


           Note -



             Specifying that a security extension be disabled is  always  hon‐
             ored  at  process execution. Specifying that a security extension
             be enabled is only honored if the underlying system provides  the
             extension,  otherwise  the security extension request is silently
             ignored.



       -z symbolcap

           Convert a relocatable object that defines object capabilities  into
           a relocatable object that defines symbol capabilities. See Convert‐
           ing Object Capabilities to Symbol Capabilities  in  Oracle  Solaris
           11.4 Linkers and Libraries Guide.


       -z sysroot=dir
       --sysroot=dir

           Specify  the  system root directory. By default, the default search
           path, and directories specified with the -L, or  -YP  options,  are
           interpreted  relative  to the system root directory /. When -z sys‐
           root is specified, these paths are instead taken  relative  to  the
           specified  directory.  See  the  -L and -YP options, and LIBPATH in
           FILES. -z sysroot can be used in conjunction with -z target to cre‐
           ate objects for a target other than the currently running system.



       -z target=sparc | x86

           Specifies the machine type for the output object. Supported targets
           are SPARC and x86. The 32-bit machine type for the specified target
           is  used  unless  the -64 option is also present, in which case the
           corresponding 64-bit machine type is used. By default, the  machine
           type of the object being generated is determined from the first ELF
           object processed from the command line. If no  objects  are  speci‐
           fied,  the  machine  type is determined by the first object encoun‐
           tered within the first archive processed from the command line.  If
           there  are  no  objects  or  archives,  the link-editor assumes the
           native machine. This option  is  useful  when  creating  an  object
           directly with the link-editor whose input is solely from a mapfile.
           See the -M option. It can also be useful in the rare case of  link‐
           ing  entirely  from  an  archive that contains objects of different
           machine types for which the first object  is  not  of  the  desired
           machine type.


       -z text | textoff | textwarn

           These  options can be used in dynamic mode only. The -z text option
           forces a fatal error if any relocations against non-writable, allo‐
           catable sections remain. For historic reasons, this mode is not the
           default when building dynamic objects. However, its use  is  recom‐
           mended  to ensure that the text segment of the dynamic object being
           built is shareable between multiple  running  processes.  A  shared
           text  segment incurs the least relocation overhead when loaded into
           memory. See Position-Independent Code in Oracle Solaris 11.4  Link‐
           ers and Libraries Guide.

           The  -z textoff  option  allows relocations against all allocatable
           sections, including non-writable ones. This  mode  is  the  default
           when building a shared object.

           The  -z textwarn  option lists a warning if any relocations against
           non-writable, allocatable sections remain. This mode is the default
           when building an executable.


       -z type=object-type

           Specify  the  type  of object to create. The following object-types
           are available.

           exec

               A dynamic executable.


           kmod

               A kernel module.


           pie

               A position-independent executable. This option also asserts the
               -z text option.


           reloc

               A  relocatable  object. This is equivalent to specifying the -r
               option.


           shared

               A shared object.  This  is  equivalent  to  specifying  the  -G
               option. This option also asserts the -z text option.



       -z verbose

           This  option provides additional warning diagnostics during a link-
           edit. Presently, this option enables the following warnings.


               o      Suspicious use of displacement relocations.


               o      Restricted use of static TLS relocations  when  building
                      shared objects.


               o      Symbol visibility inconsistencies.

           In  the future, this option might be enhanced to provide additional
           diagnostics that are deemed too noisy to be generated by default.


       -z wrap=symbol
       -wrap=symbol
       --wrap=symbol

           Rename undefined references to symbol in  order  to  allow  wrapper
           code  to  be linked into the output object without having to modify
           source code. When the -z wrap option is  specified,  all  undefined
           references  to  symbol are modified to reference __wrap_symbol, and
           all references to __real_symbol are modified to  reference  symbol.
           You  are expected to provide an object containing the __wrap_symbol
           function. This wrapper function can call __real_symbol in order  to
           reference the actual function being wrapped.

           The  following  is an example of a wrapper for the malloc(3C) func‐
           tion.


             void *
             __wrap_malloc(size_t c)
             {
                     (void) printf("malloc called with %zu\n", c);
                     return (__real_malloc(c));
             }

           If other code is linked with this file using -z wrap=malloc to com‐
           pile  all  the  objects, then all calls to malloc call the function
           __wrap_malloc instead. The call to  __real_malloc  calls  the  real
           malloc function.

           The  real  and  wrapped  functions should be maintained in separate
           source files. Otherwise, the compiler or assembler may resolve  the
           call instead of leaving that operation for the link-editor to carry
           out, and prevent the wrap from occurring.




       -?
       --help

           Print usage message and immediately exit.



SECONDARY OPTIONS
       The following options are less commonly used. These options provide for
       backward compatibility, very specialized features, or options that have
       been superseded with improved variants.

       -a

           In static mode only, produces a static executable  file.  Undefined
           references  are  not permitted. This option is the default behavior
           for  static  mode.  The  -a  option  can  not  be  used  with   the
           -z type=reloc  or -r options. See Static Executables under DESCRIP‐
           TION.


       -b

           In dynamic mode only, provides no special  processing  for  dynamic
           executable  relocations  that  reference symbols in shared objects.
           Without the -b option, the link-editor applies techniques within  a
           dynamic  executable  so that the text segment can remain read-only.
           One technique is the creation of special position-independent relo‐
           cations  for  references  to  functions  that are defined in shared
           objects. Another technique  arranges  for  data  objects  that  are
           defined  in shared objects to be copied into the memory image of an
           executable at runtime.

           The -b option is intended for specialized dynamic  objects  and  is
           not recommended for general use. Its use suppresses all specialized
           processing required to ensure an  object's  shareability,  and  can
           even prevent the relocation of 64-bit executables.


       -B group

           Establishes  a  shared  object  and  its  dependencies  as a group.
           Objects within the group are bound to other members of the group at
           runtime.  This  mode is similar to adding the object to the process
           by using dlopen(3C) with the RTLD_GROUP mode. An object that has an
           explicit  dependency  on  a object identified as a group, becomes a
           member of the group.

           As the group must be self contained, use  of  the  -B group  option
           also asserts the -z defs option.

           Establishing  a group provides a primitive means of controlling the
           binding of a group of  objects.  However,  better  control  can  be
           accomplished with direct bindings. See the -B direct option.


       -B symbolic | symbolic-functions

           These options are only available when creating a shared object. The
           -B symbolic option causes global symbol references to be  bound  to
           definitions  within the object being built, if a definition exists.
           The -B symbolic-functions restricts this binding to  function  sym‐
           bols.

           Normally,  references  to global symbols within a shared object are
           not bound until runtime, regardless of whether a definition of  the
           symbol exists within the shared object. This model allows a defini‐
           tion of the same symbol from an executable, or from another  shared
           object, to override the object's own definition.

           The  -B symbolic  options  are  intended  for  specialized  dynamic
           objects and are not recommended for  general  use.  Although  these
           options can reduce runtime relocation overhead, they can compromise
           bindings that expect interposition. To  reduce  runtime  relocation
           processing,  the  creation of a version definition or use of direct
           bindings is recommended over using these options.

           Note -



             The use of mapfiles can provide greater flexibility over defining
             symbol  visibilities, and affecting relocation overhead. See SYM‐
             BOL_SCOPE and SYMBOL_VERSION Directives in  Oracle  Solaris  11.4
             Linkers and Libraries Guide.



       -d y | n

           When -d  y, the default, is specified, the link-editor uses dynamic
           linking. When -d  n is specified, the link-editor uses static link‐
           ing.  These  options,  and  the  mode that the link-editor operates
           under, are more commonly controlled by higher level options such as
           -z type, -r, and -G. See also Static Executables under DESCRIPTION,
           and -B dynamic | static.


       -I name
       --dynamic-linker name

           When building an executable, uses name as  the  path  name  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 runtime linker, ld.so.1(1). Either case can be overrid‐
           den by -I  name. exec(2) loads this interpreter when the  a.out  is
           loaded,  and  passes  control to the interpreter rather than to the
           a.out directly.



       -N string

           This option causes a DT_NEEDED entry to be added  to  the  .dynamic
           section  of  the  object  being  built.  The value of the DT_NEEDED
           string is the string that is specified on the  command  line.  This
           option  is position dependent, and the DT_NEEDED  .dynamic entry is
           relative to the other dynamic dependencies discovered on the  link-
           edit line. This option is useful for specifying dependencies within
           device driver relocatable objects when combined with the -dy and -r
           options.


       -t

           Turns off the warning for multiply-defined tentative (common block)
           data symbols that have different  sizes  or  different  alignments.
           This option is equivalent to specifying the -z relax=common option.


       -Wl,option

           The  -Wl,  option  provides  a means of passing link-editor options
           through a compiler driver. The compiler driver typically strips the
           -Wl,  and passes the remaining option to the link-editor. Instances
           have occurred, particularly when building  complex  portable  soft‐
           ware,  in  which  the link-editor has been called directly with the
           entire -Wl, option. To provide flexibility in such situations,  the
           link-editor strips the -Wl, and interprets and remaining option. As
           such options are usually not under a users  control,  any  unrecog‐
           nized  -W  options  result in a warning, rather than a fatal error,
           and the option being ignored.


       -YP,dirlist

           Changes the default directories used for finding libraries. dirlist
           is  a  colon-separated path list. There should be no need to change
           the default search paths. Default search paths can change in  newer
           releases  of the operating system. Use of this option to explicitly
           dictate complete search paths run the risk of becoming incompatible
           with  newer  releases of the operating system. This option is main‐
           tained to support the historical  use  of  some  compiler  drivers.
           Although  supported, such use is not recommended. Additional search
           paths that are required for a link-edit should be provided with the
           -L option.


       -z absexec

           Used only when building a dynamic executable. Specifies that refer‐
           ences to external absolute symbols should be  resolved  immediately
           instead  of  being left for resolution at runtime. In very special‐
           ized circumstances, this option removes text relocations  that  can
           result in excessive swap space demands by an executable.


       -z altexec64

           Execute  the  64-bit link-editor. Prior to Solaris 11, the class of
           link-editor that was executed was determined by the  class  of  ELF
           object  being  created.  Now,  the class of the link-editor that is
           executed is always 64-bit. This option is maintained  for  backward
           compatibility with older versions of Solaris.


       -z aslr[=mode]

           This option is equivalent to specifying the -z sx=aslr option.


       -z combreloc | nocombreloc

           By  default,  the link-editor combines multiple relocation sections
           when building dynamic objects.  This  section  combination  differs
           from  relocatable  objects,  in which relocation sections are main‐
           tained in a one-to-one relationship with the sections to which  the
           relocations  must  be  applied.  The -z nocombreloc option disables
           this merging of relocation sections, and preserves  the  one-to-one
           relationship found in the original relocatable objects.

           The  link-editor  sorts  the entries of data relocation sections by
           their symbol reference. This sorting reduces runtime symbol lookup.
           When  multiple  relocation sections are combined, this sorting pro‐
           duces the least  possible  relocation  overhead  when  objects  are
           loaded  into  memory,  and  speeds  the  runtime loading of dynamic
           objects.

           Historically, the individual relocation sections were carried  over
           to  any dynamic object, and the -z combreloc option was required to
           enable the relocation section merging previously described. Reloca‐
           tion section merging is now the default. The -z combreloc option is
           still accepted for the benefit of old build environments,  but  the
           option is unnecessary, and has no effect.


       -z gnu-version-script=mapfile
       -z gnu-version-script-compat
       --version-script mapfile

           Provides  partial  support for the GNU version script style of map‐
           file. Version scripts are based on the original Solaris  version  1
           symbol  definition  syntax,  with  some extensions. ld supports the
           most common such extension, the use of wildcard characters  in  the
           specified  symbol  names.  Other GNU-specific extensions may not be
           supported. ld will issue an appropriate  error  if  an  unsupported
           extension is encountered.

           For  convenience  in  building  software developed with GNU version
           scripts, the native GNU  --version-script option is accepted as  an
           alias  for  -z gnu-version-script. Due to the partial nature of the
           support for GNU version scripts, the use of  --version-script  must
           be explicitly enabled by specifying -z gnu-version-script-compat.




       -z groupperm | nogroupperm

           Assigns,  or  deassigns  each  dependency  that follows to a unique
           group. The assignment of a dependency  to  a  group  has  the  same
           effect  as  if  the  dependency  had  been built using the -B group
           option.


       -z muldefs
       --allow-multiple-definition

           Allows multiple, global, symbol definitions. By  default,  multiple
           symbol definitions that occur between relocatable objects result in
           a fatal error condition. This option suppresses  the  error  condi‐
           tion, allowing the first symbol definition to be taken. Specialized
           compiler options, or high levels of compiler optimization, can cir‐
           cumvent  the  use  of  this option. See Fatal Resolutions in Oracle
           Solaris 11.4 Linkers and Libraries Guide.



       -z nocompstrtab

           Disables the compression of ELF string  tables,  and  comment  sec‐
           tions. By default, string compression is applied to SHT_STRTAB sec‐
           tions, to SHT_PROGBITS  sections  that  have  their  SHF_MERGE  and
           SHF_STRINGS section flags set, and to comment sections.

           The  mcs(1)  utility,  together with -c option, can be used to com‐
           press comment sections after an object has been built.


       -z nodefaultlib

           Identifies the object so that the runtime  default  library  search
           path,  used after any LD_LIBRARY_PATH or runpaths, is ignored. This
           option implies that all dependencies of the object can be satisfied
           from its runpath.


       -z nodump

           This  option  was  historically  used to identify the object as not
           available to dldump(3C). The -z nodump option  is  still  accepted,
           but the option is unnecessary, and has no effect.


       -z noldynsym

           Prevents  the  inclusion  of  a  .SUNW_ldynsym section in a dynamic
           object. The .SUNW_ldynsym section augments the .dynsym  section  by
           providing symbols for local functions. Local function symbols allow
           debuggers to display local function  names  in  stack  traces  from
           stripped  programs.  Similarly,  dladdr(3C)  is able to supply more
           accurate results.

           The -z noldynsym option also prevents the inclusion of the two sym‐
           bol  sort  sections  that are related to the .SUNW_ldynsym section.
           The .SUNW_dynsymsort section  provides  sorted  access  to  regular
           function  and  variable  symbols. The .SUNW_dyntlssort section pro‐
           vides sorted access to thread local storage (TLS) variable symbols.

           The .SUNW_ldynsym, .SUNW_dynsymsort, and .SUNW_dyntlssort sections,
           which  becomes  part of the allocable text segment of the resulting
           file, cannot be removed by strip(1).  Therefore,  the  -z noldynsym
           option is the only way to prevent their inclusion.


       -z nopartial

           Partially  initialized symbols, that are defined within relocatable
           objects, are expanded in the output file being generated.


       -z noversion

           Eliminates versioning information. Version sections  or  associated
           .dynamic section entries are not generated in the output image.


       -z now

           Identifies  the  object as requiring non-lazy runtime binding. This
           mode is similar to adding  the  object  to  the  process  by  using
           dlopen(3C)  with  the  RTLD_NOW  mode. This mode is also similar to
           having  the  LD_BIND_NOW  environment  variable  in   effect.   See
           ld.so.1(1).


       -z nxheap[=mode]

           This option is equivalent to specifying the -z sx=nxheap option.


       -z nxstack[=mode]

           This option is equivalent to specifying the -z sx=nxstack option.


       -z origin

           Identifies  the object as requiring immediate $ORIGIN processing at
           runtime. This option is only maintained for historic compatibility,
           as  the runtime analysis of objects to provide for $ORIGIN process‐
           ing is now default.


       -z redlocsym
       -x
       --discard-all

           Eliminates all local symbols except for the SECT symbols  from  the
           symbol  table  SHT_SYMTAB. All relocations that refer to local sym‐
           bols are updated to refer to the corresponding  SECT  symbol.  This
           option  allows  specialized  objects to greatly reduce their symbol
           table sizes. See also the -z strip-class and -z noldynsym options.

           Although useful for special objects such as those used  within  the
           operating system kernel, the -z redlocsym option is not recommended
           for general use. The size of the symbol table SHT_SYMTAB  does  not
           effect  runtime  behavior, and the elimination of local symbols can
           negatively effect process observability. Eliminated  local  symbols
           can  reduce  the  debugging information that is generated using the
           compiler drivers -g option.  Eliminated  local  symbols  will  also
           remove  the  information normally written to the .SUNW_ldynsym sec‐
           tion, reducing the effectiveness of debuggers  and  tools  such  as
           pstack(1) and truss(1).




       -z relax=item1,item2,...

           The  link-editor  performs  validity checks in order to ensure that
           the resulting output object is valid  and  usable  at  runtime.  In
           addition,  the  link-editor can transition a variety of relocations
           to generate more optimal instruction sequences.

           The -z relax option can be used to relax these operations in  order
           to produce an output object that would otherwise be rejected.


           Note -



             Disabling validity checks can result in the creation of a corrupt
             or otherwise unusable object. The -z relax option is  a  special‐
             ized  option,  mainly of interest to compiler authors, and is not
             intended for general use.

           The following item tokens are recognized.

           comdat

               A relocation that remains against a symbol that has been elimi‐
               nated  as  part  of a COMDAT section, results in a fatal error.
               The -z relax=comdat option redirects  such  relocations  to  an
               equivalent symbol in a retained COMDAT section.


           common

               Multiply-defined  tentative  data  symbols, that have different
               sizes or different alignments, produce a warning. These  condi‐
               tions  typically  originate  from  Fortran  common  blocks. The
               -z relax=common option disables this warning.


           secadj

               ELF objects require certain sections to  be  adjacent  to  each
               other in a specified order in the output object. This automatic
               layout can be disrupted by link-editor mapfiles that explicitly
               layout  sections.  An  invalid layout results in a fatal error.
               The -z relax=secadj option suppresses layout verification.


           symbound

               Symbols that refer to data beyond the bounds of  their  associ‐
               ated  section  can result in invalid memory accesses. Such sym‐
               bols result in a fatal error. The -z relax=symbound option sup‐
               presses this error condition.


           transdisp

               On  SPARC,  a  family  of GOTDATA relocations provide access to
               data relative to the Global Offset Table (GOT).  Locally  bound
               data  items  allow the link-editor to transition the associated
               code sequence to provide a more optimized  access  model.  How‐
               ever,  this  model  only provides for accessing the data within
               +/- 2 Gbytes of the GOT address. A relocation that exceeds this
               limit  results  in  a fatal error. In the rare case that a data
               reference exceeds this limit, the -z relax=transdisp option can
               be  used  to adjust GOTOP access model transitions. This relax‐
               ation removes the address range  limit  at  the  expense  of  a
               slightly less optimal code sequence.


           transtls

               Thread-Local  Storage (TLS) access provides numerous models for
               data access. See Thread-Local Storage Access Models  in  Oracle
               Solaris  11.4  Linkers and Libraries Guide. The link-editor can
               transition the associated code sequence based  off  the  output
               file   being   created,   and   a   symbols   visibility.   The
               -z relax=transtls option suppresses TLS  access  model  transi‐
               tions.



       -z relaxreloc

           This option is equivalent to specifying the -z relax=comdat option.


       -z rescan

           A  position  independent option that causes a rescan of the archive
           files that are provided to the link-edit.  The  link-editor  defers
           the  rescan  operation until after it has processed the entire com‐
           mand line, and then initiates a final rescan operation over all ar‐
           chives seen on the command line. The -z rescan operation can inter‐
           act incorrectly with objects that contain initialization (.init) or
           finalization  (.fini)  sections,  preventing the code in those sec‐
           tions from running. For this reason, -z rescan is  deprecated,  and
           use of -z rescan-now is advised.


ENVIRONMENT VARIABLES
       The  following environment variables are recognized by the link-editor.
       Additional environment variables, prefixed with LD_, are available  for
       use with the runtime linker. See ld.so.1(1).

       LD_ALTEXEC

           An alternative link-editor path name. The link-editor executes, and
           passes control to this alternative  link-editor.  This  environment
           variable  provides  a generic means of overriding the default link-
           editor that is called from the various compiler drivers.


       LD_LIBRARY_PATH

           A list of directories in which to search for the  libraries  speci‐
           fied  using  the -l option. Multiple directories are separated by a
           colon. In the most general case, this environment variable contains
           two directory lists separated by a semicolon.


             dirlist1;dirlist2

           If  the link-editor is called with any number of occurrences of -L,
           as in:


             $ ld ... -Lpath1 ... -Lpathn ...

           then the search path ordering is:


             dirlist1 path1 ... pathn dirlist2 LIBPATH

           When the list of directories does not contain a semicolon, the list
           is interpreted as dirlist2.

           The  LD_LIBRARY_PATH  environment variable also affects the runtime
           linkers search for dynamic dependencies.

           This environment variable can be specified with a _32 or  _64  suf‐
           fix. This makes the environment variable specific, respectively, to
           32-bit or 64-bit processes and overrides any  non-suffixed  version
           of the environment variable that is in effect.


       LD_NOEXEC_64

           Prior to Oracle Solaris 11.4, the class of the link-editor that was
           executed was determined by the class of the underlying system,  and
           could  be  32-bit  or 64-bit. The LD_NOEXEC_64 environment variable
           was used to suppress the automatic execution of  the  64-bit  link-
           editor.  In  current systems, the link-editor is always 64-bit, and
           LD_NOEXEC_64 is ignored and has no effect. This variable  is  main‐
           tained for backward compatibility with older versions of Solaris.


       LD_OPTIONS, LD_UNSET, LD_{object-type}_UNSET, LD_{object-type}_OPTIONS

           These  environment  variables  provide a means of adding additional
           options, or removing existing options, from the link-editor command
           line.  The object-type provides the types, in uppercase, defined by
           the -z type option. Thus, the  following  object-type  options  are
           available.


               o      LD_EXEC_UNSET and LD_EXEC_OPTIONS


               o      LD_KMOD_UNSET and LD_KMOD_OPTIONS


               o      LD_PIE_UNSET and LD_PIE_OPTIONS


               o      LD_RELOC_UNSET and LD_RELOC_OPTIONS


               o      LD_SHARED_UNSET and LD_SHARED_OPTIONS

           See OPTION PROCESSING.


       LD_RUN_PATH

           An  alternative mechanism for specifying a runpath to the link-edi‐
           tor. See the -R option. If both LD_RUN_PATH and the -R  option  are
           specified, -R supersedes.


       SGS_SUPPORT

           Provides  a  colon-separated list of shared objects that are loaded
           with the link-editor and given information  regarding  the  linking
           process.  This  environment variable can be specified with a _32 or
           _64 suffix. This makes the environment variable  specific,  respec‐
           tively,  to the 32-bit or 64-bit class of the link-editor and over‐
           rides any non-suffixed version of the environment variable that  is
           in effect. See the -S option.



       Notice  that  environment variable-names that begin with the characters
       'LD_'  are  reserved  for  possible  future  enhancements  to  ld   and
       ld.so.1(1).

FILES
       libx.so        shared object libraries.


       libx.a         archive libraries.


       a.out          default output file.


       LIBPATH        For  32-bit  libraries, the default search path is /lib,
                      followed by /usr/lib. For 64-bit libraries, the  default
                      search path is /lib/64, followed by /usr/lib/64.


       /usr/lib/ld    A directory containing several mapfiles that can be used
                      during  link-editing.  These  mapfiles  provide  various
                      capabilities,  such as defining memory layouts, aligning
                      bss, and defining non-executable stacks.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE  VALUE _ Availabilitysystem/linker _ Interface StabilityCommit‐
       ted


SEE ALSO
       as(1), crle(1), elfcompress(1), gprof(1), ld.so.1(1),  ldd(1),  mcs(1),
       pvs(1),  strip(1),  exec(2),  stat(2), dldump(3C), zlib(3), dlopen(3C),
       elf(3ELF), ar.h(3HEAD), a.out(5), attributes(7), sxadm(8)


       Oracle Solaris 11.4 Linkers and Libraries Guide

NOTES
       Default options applied by the link-editor are maintained for  historic
       reasons. In today's programming environment, where dynamic objects dom‐
       inate, alternative defaults would often make more sense. However,  his‐
       toric defaults must be maintained to ensure compatibility with existing
       program development environments.  Historic  defaults  are  called  out
       wherever possible in this manual. For a description of the current rec‐
       ommended options, see Chapter 5, Link-Editor Quick Reference in  Oracle
       Solaris 11.4 Linkers and Libraries Guide.


       If  the  file being created by the link-editor already exists, the file
       is unlinked after all input files have been processed. A new file  with
       the specified name is then created. This allows the link-editor to cre‐
       ate a new version of the file, while simultaneously  allowing  existing
       processes that are accessing the old file contents to continue running.
       If the old file has no other links, the disk space of the removed  file
       is freed when the last process referencing the file terminates.


       The  behavior  of  the  link-editor when the file being created already
       exists was changed with Oracle  Solaris  11.  In  older  versions,  the
       existing file was rewritten in place, an approach with the potential to
       corrupt any running processes that is using the file. This  change  has
       an  implication  for  output files that have multiple hard links in the
       file system. Previously, all links would remain intact, with all  links
       accessing  the  new  file contents. The new link-editor behavior breaks
       such links, with the result that only the specified  output  file  name
       references  the new file. All the other links continue to reference the
       old file. To ensure consistent behavior, applications that rely on mul‐
       tiple  hard  links  to linker output files should explicitly remove and
       relink the other file names.



Oracle Solaris 11.4            18 December 2017                          ld(1)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3