ldd man page on SmartOS

Printed from http://www.polarhome.com/service/man/?qf=ldd&af=0&tf=2&of=SmartOS

LDD(1)									LDD(1)

NAME
       ldd - list dynamic dependencies of executable files or shared objects

SYNOPSIS
       ldd [-d | -r] [-c] [-e envar] [-f] [-i] [-L] [-l] [-p] [-s]
	   [-U | -u] [-v] [-w] filename...

DESCRIPTION
       The  ldd	 utility lists the dynamic dependencies of executable files or
       shared objects. ldd uses the runtime linker, ld.so.1, to	 generate  the
       diagnostics.  The  runtime  linker takes the object being inspected and
       prepares the object as would occur in a running	process.  By  default,
       ldd triggers the loading of any lazy dependencies.

       ldd  lists  the	path  names of all shared objects that would be loaded
       when filename is loaded. ldd expects the shared objects that are	 being
       inspected  to have execute permission. If a shared object does not have
       execute permission, ldd issues a warning before attempting  to  process
       the file.

       ldd processes its input one file at a time. For each file, ldd performs
       one of the following:

	   o	  Lists the object dependencies if the dependencies exist.

	   o	  Succeeds quietly if dependencies do not exist.

	   o	  Prints an error message if processing fails.

       The dynamic objects that are inspected by ldd are not executed.	There‐
       fore,  ldd  does	 not list any shared objects explicitly attached using
       dlopen(3C). To display all the objects in use by a process, or  a  core
       file, use pldd(1).

OPTIONS
       ldd  can	 also  check  the  compatibility  of  filename with the shared
       objects filename uses. With the following options, ldd prints  warnings
       for  any unresolved symbol references that would occur when filename is
       loaded.

       -d
	     Check immediate references.

       -r
	     Check both immediate references and lazy references.

       Only one of the options -d or -r can be	specified  during  any	single
       invocation of ldd.

       immediate references are typically to data items used by the executable
       or shared object code. immediate references are also pointers to	 func‐
       tions,  and  even  calls	 to  functions	made from a position dependent
       shared object. lazy references are typically calls to global  functions
       made  from  a  position independent shared object, or calls to external
       functions made from an executable. For more information on these	 types
       of  reference,  see  When  Relocations  Are Performed in the Linker and
       Libraries Guide. Object loading can also be affected by relocation pro‐
       cessing. See Lazy Loading under USAGE for more details.

       Some  unresolved	 symbol	 references are not reported by default. These
       unresolved references can be reported with the following options. These
       options	are  only  useful  when	 combined with either the -d or the -r
       options.

       -p
	     Expose any unresolved symbol errors to explicit parent and exter‐
	     nal references.

       -w
	     Expose any unresolved weak symbol references.

       A  shared  object can make reference to symbols that should be supplied
       by the caller of the shared object. These references can be  explicitly
       classified when the shared object is created, as being available from a
       parent, or simply as being external.  See  the  -M  mapfile  option  of
       ld(1), and the PARENT and EXTERN symbol definition keywords. When exam‐
       ining a dynamic executable, a parent or external reference that can not
       be  resolved is flagged as an error. However by default, when examining
       a shared object, a  parent  or  external	 reference  that  can  not  be
       resolved	 is  not  flagged  as  an error. The -p option, when used with
       either the -d or -r options, causes any unresolved parent  or  external
       reference to be flagged as a relocation error.

       Symbols that are used by relocations may be defined as weak references.
       By default, if a weak symbol reference can not be resolved, the reloca‐
       tion  is	 ignored  and  a zero written to the relocation offset. The -w
       option, when used with either the -d or	the  -r	 options,  causes  any
       unresolved  relocation against a weak symbol reference to be flagged as
       a relocation error.

       ldd can also check dependency use. With each of the following  options,
       ldd  prints  warnings for any unreferenced, or unused dependencies that
       are loaded when filename is loaded. Only when  a	 symbol	 reference  is
       bound  to  a  dependency, is that dependency deemed used. These options
       are therefore only useful when symbol references are being checked.  If
       the -r option is not in effect, the -d option is enabled.

       A dependency that is defined by an object but is not bound to from that
       object is an unreferenced dependency. A dependency that is not bound to
       by any other object when filename is loaded is an unused object.

       Dependencies  can  be  located in default system locations, or in loca‐
       tions that must be specified by search paths. Search paths may be spec‐
       ified  globally,	 such  as  the	environment  variable LD_LIBRARY_PATH.
       Search paths can also be defined in dynamic objects  as	runpaths.  See
       the  -R option to ld(1).	 Search paths that are not used to satisfy any
       dependencies cause unnecessary file system processing.

       -U
	     Displays any unreferenced, or unused dependencies. If an unrefer‐
	     enced  dependency	is  not	 bound to by other objects loaded with
	     filename, the dependency is also flagged as unused. Cyclic depen‐
	     dencies  that  are not bound to from objects outside of the cycle
	     are also deemed unreferenced.

	     This option also displays any unused search paths.

       -u
	     Displays any unused objects.

       Only one of the options -U or -u can be	specified  during  any	single
       invocation  of  ldd,  although -U is a superset of -u. Objects that are
       found to be unreferenced, or unused when using the -r option, should be
       removed	as  dependencies.  These  objects  provide  no references, but
       result in unnecessary overhead when filename is loaded. When using  the
       -d option, any objects that are found to be unreferenced, or unused are
       not immediately required when filename is  loaded.  These  objects  are
       candidates  for	lazy  loading.	See  Lazy Loading under USAGE for more
       details.

       The removal of unused dependencies  reduces  runtime-linking  overhead.
       The  removal of unreferenced dependencies reduces runtime-linking over‐
       head to a lesser degree. However, the removal of unreferenced dependen‐
       cies  guards  against a dependency being unused when combined with dif‐
       ferent objects, or as the other object dependencies evolve.

       The removal of unused search paths can  reduce  the  work  required  to
       locate  dependencies. This can be significant when accessing files from
       a file server over a network. Note, a search path can be encoded within
       an  object  to satisfy the requirements of dlopen(3C). This search path
       might not be required to obtain the dependencies of  this  object,  and
       hence will look unused to ldd.

       The following additional options are supported:

       -c
		   Disables  any  configuration	 file use. Configuration files
		   can be employed to alter default search paths, and  provide
		   alternative object dependencies. See crle(1).

       -e envar
		   Sets the environment variable envar.

		   This	 option	 is  useful for experimenting with environment
		   variables that are recognized by the	 runtime  linker  that
		   can adversely affect ldd, for example, LD_PRELOAD.

		   This option is also useful for extracting additional infor‐
		   mation solely from the object under inspection,  for	 exam‐
		   ple, LD_DEBUG. See ld.so.1(1) and lari(1).

       -f
		   Forces  ldd	to  check  for	an executable file that is not
		   secure. When ldd is invoked by a superuser, by default  ldd
		   does not process any executable that is not secure. An exe‐
		   cutable is not considered secure if	the  interpreter  that
		   the	executable  specifies  does  not  reside  under	 /lib,
		   /usr/lib or /etc/lib. An executable is also not  considered
		   secure  if  the interpreter cannot be determined. See Secu‐
		   rity under USAGE.

       -i
		   Displays the order of execution of initialization sections.
		   The	order that is discovered can be affected by use of the
		   -d or -r options. See Initialization Order under USAGE.

       -L
		   Enables lazy loading. Lazy loading is the default  mode  of
		   operation  when  the	 object	 under inspection is loaded as
		   part of a process. In this case, any lazy dependencies,  or
		   filters, are only loaded into the process when reference is
		   made to a symbol that is defined within  the	 lazy  object.
		   The	-d  or -r options, together with the -L option, can be
		   used to inspect the dependencies, and their order of	 load‐
		   ing as would occur in a running process.

       -l
		   Forces  the immediate processing of any filters so that all
		   filtees, and their dependencies, are listed. The  immediate
		   processing  of filters is now the default mode of operation
		   for ldd. However, under this default any auxiliary  filtees
		   that	 cannot	 be  found  are silently ignored. Under the -l
		   option, missing auxiliary filtees generate  an  error  mes‐
		   sage.

       -s
		   Displays  the  search  path	used  to  locate shared object
		   dependencies.

       -v
		   Displays all dependency relationships  incurred  when  pro‐
		   cessing filename.  This option also displays any dependency
		   version requirements. See pvs(1).

USAGE
   Security
       A superuser should use the -f option only if the executable to be exam‐
       ined is known to be trustworthy. The use of -f on an untrustworthy exe‐
       cutable while superuser can compromise system security. If an  executa‐
       bles  trustworthyness is unknown, a superuser should temporarily become
       a regular user. Then invoke ldd as this regular user.

       Untrustworthy objects can be safely  examined  with  dump(1)  and  with
       mdb(1),	as  long as the :r subcommand is not used. In addition, a non-
       superuser can use either the :r subcommand of mdb, or truss(1) to exam‐
       ine an untrustworthy executable without too much risk of compromise. To
       minimize risk when using ldd, adb :r, or truss on an untrustworthy exe‐
       cutable, use the UID "nobody".

   Lazy Loading
       Lazy  loading  can  be applied directly by specified lazy dependencies.
       See the -z lazyload option of ld(1). Lazy loading can also  be  applied
       indirectly  through  filters. See the -f option and -F option of ld(1).
       Objects that employ lazy loading techniques can	experience  variations
       in  ldd	output due to the options used. If an object expresses all its
       dependencies as lazy, the default operation of ldd lists all  dependen‐
       cies  in	 the  order  in	 which	the  dependencies are recorded in that
       object:

	 example% ldd main
		 libelf.so.1 =>	  /lib/libelf.so.1
		 libnsl.so.1 =>	  /lib/libnsl.so.1
		 libc.so.1 =>	  /lib/libc.so.1

       The lazy loading behavior that occurs when this object is used at  run‐
       time  can  be enabled using the -L option. In this mode, lazy dependen‐
       cies are loaded when reference is made to  a  symbol  that  is  defined
       within  the lazy object. Therefore, combining the -L option with use of
       the -d and -r options reveals the dependencies that are needed to  sat‐
       isfy the immediate, and lazy references respectively:

	 example% ldd -L main
	 example% ldd -d main
		 libc.so.1 =>	    /lib/libc.so.1
	 example% ldd -r main
		 libc.so.1 =>	    /lib/libc.so.1
		 libelf.so.1 =>	  /lib/libelf.so.1

       Notice  that  in	 this  example, the order of the dependencies that are
       listed is not the same as displayed from ldd with no options. Even with
       the  -r	option,	 the lazy reference to dependencies might not occur in
       the same order as would occur in a running program.

       Observing lazy loading can also reveal objects that are not required to
       satisfy	any  references.  These objects, in this example, libnsl.so.1,
       are candidates for removal from the link-line used to build the	object
       being inspected.

   Initialization Order
       Objects that do not explicitly define their required dependencies might
       observe variations in the initialization section order displayed by ldd
       due  to	the  options  used.  For  example,  a simple application might
       reveal:

	 example% ldd -i main
		 libA.so.1 =>	  ./libA.so.1
		 libc.so.1 =>	  /lib/libc.so.1
		 libB.so.1 =>	  ./libB.so.1

	     init object=./libB.so.1
	     init object=./libA.so.1
	     init object=/lib/libc.so.1

       whereas, when relocations are applied, the initialization section order
       is:

	 example% ldd -ir main
		 .........

	     init object=/lib/libc.so.1
	     init object=./libB.so.1
	     init object=./libA.so.1

       In   this   case,   libB.so.1   makes   reference   to  a  function  in
       /usr/lib/libc.so.1. However, libB.so.1 has no  explicit	dependency  on
       this  library.  Only  after  a relocation is discovered is a dependency
       then established. This implicit dependency affects  the	initialization
       section order.

       Typically,  the initialization section order established when an appli‐
       cation is executed, is equivalent to ldd with the -d option. The	 opti‐
       mum  order  can be obtained if all objects fully define their dependen‐
       cies. Use of the	 ld(1)	options	 -zdefs	 and  -zignore	when  building
       dynamic objects is recommended.

       Cyclic  dependencies can result when one or more dynamic objects refer‐
       ence each other. Cyclic dependencies should be  avoided,	 as  a	unique
       initialization  sort  order  for	 these	dependencies can not be estab‐
       lished.

       Users that prefer a more static analysis of object  files  can  inspect
       dependencies using tools such as dump(1) and elfdump(1).

FILES
       /usr/lib/lddstub
			      Fake  32-bit  executable	loaded	to  check  the
			      dependencies of shared objects.

       /usr/lib/64/lddstub
			      Fake  64-bit  executable	loaded	to  check  the
			      dependencies of shared objects.

SEE ALSO
       crle(1),	 dump(1),  elfdump(1),	lari(1),  ld(1),  ld.so.1(1),  mdb(1),
       pldd(1), pvs(1), truss(1), dlopen(3C), attributes(5)

       Linker and Libraries Guide

DIAGNOSTICS
       ldd prints the record of	 shared	 object	 path  names  to  stdout.  The
       optional	 list  of  symbol resolution problems is printed to stderr. If
       filename is not an executable file or a shared object, or  if  filename
       cannot be opened for reading, a non-zero exit status is returned.

NOTES
       Use  of	the  -d	 or  -r option with shared objects can give misleading
       results. ldd does a worst case analysis of the shared objects. However,
       in  practice,  the  symbols reported as unresolved might be resolved by
       the executable file referencing the shared object. The runtime  linkers
       preloading  mechanism can be employed to add dependencies to the object
       being inspected.	 See LD_PRELOAD.

       ldd uses the same algorithm as the  runtime  linker  to	locate	shared
       objects.

				  Jun 3, 2008				LDD(1)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net