Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RTLD(1)			    General Commands Manual		       RTLD(1)

NAME
       ld-elf.so.1, ld.so, rtld	-- run-time link-editor

DESCRIPTION
       The  ld-elf.so.1	 utility  is  a	self-contained shared object providing
       run-time	support	for loading and	link-editing  shared  objects  into  a
       process'	 address  space.   It  is  also	 commonly known	as the dynamic
       linker.	It uses	 the  data  structures	contained  within  dynamically
       linked  programs	 to  determine	which  shared libraries	are needed and
       loads them using	the mmap(2) system call.

       After all shared	libraries have been successfully  loaded,  ld-elf.so.1
       proceeds	 to resolve external references	from both the main program and
       all objects loaded.  A mechanism	is provided  for  initialization  rou-
       tines to	be called on a per-object basis, giving	a shared object	an op-
       portunity  to  perform any extra	set-up before execution	of the program
       proper begins.  This is useful for C++ libraries	 that  contain	static
       constructors.

       When  resolving dependencies for	the loaded objects, ld-elf.so.1	may be
       allowed to translate dynamic token strings in rpath and soname by  set-
       ting  -z	 origin	 option	 of  the  static  linker ld(1).	 The following
       strings are recognized now:

       $ORIGIN	  Translated to	the full path of the loaded object.

       $OSNAME	  Translated to	the name of the	operating  system  implementa-
		  tion.

       $OSREL	  Translated to	the release level of the operating system.

       $PLATFORM  Translated to	the machine hardware platform.

       The  ld-elf.so.1	 utility  itself is loaded by the kernel together with
       any dynamically-linked program that is  to  be  executed.   The	kernel
       transfers  control to the dynamic linker.  After	the dynamic linker has
       finished	loading, relocating, and initializing the program and its  re-
       quired  shared  objects,	it transfers control to	the entry point	of the
       program.	 The following search order is used to locate required	shared
       objects:

	     1.	  DT_RPATH  of	the referencing	object unless that object also
		  contains a DT_RUNPATH	tag
	     2.	  DT_RPATH of the program unless the referencing  object  con-
		  tains	a DT_RUNPATH tag
	     3.	  Path indicated by LD_LIBRARY_PATH environment	variable
	     4.	  DT_RUNPATH of	the referencing	object
	     5.	  Hints	file produced by the ldconfig(8) utility
	     6.	  The  /lib  and  /usr/lib directories,	unless the referencing
		  object was linked using the "-z nodefaultlib"	option

       The ld-elf.so.1 utility recognizes a number  of	environment  variables
       that can	be used	to modify its behaviour.  On 64-bit architectures, the
       linker  for  32-bit  objects  recognizes	 all the environment variables
       listed  below,  but  is	being  prefixed	 with  LD_32_,	for   example:
       LD_32_TRACE_LOADED_OBJECTS.

       LD_DUMP_REL_POST	  If  set,  ld-elf.so.1	 will print a table containing
			  all relocations after	symbol binding and relocation.

       LD_DUMP_REL_PRE	  If set, ld-elf.so.1 will print  a  table  containing
			  all  relocations  before  symbol binding and reloca-
			  tion.

       LD_LIBMAP	  A library replacement	list in	 the  same  format  as
			  libmap.conf(5).  For convenience, the	characters `='
			  and  `,'  can	 be used instead of a space and	a new-
			  line.	 This variable is parsed after libmap.conf(5),
			  and will override its	entries.  This variable	is un-
			  set for set-user-ID and set-group-ID programs.

       LD_LIBMAP_DISABLE  If set,  disables  the  use  of  libmap.conf(5)  and
			  LD_LIBMAP.   This  variable is unset for set-user-ID
			  and set-group-ID programs.

       LD_ELF_HINTS_PATH  This variable	will override the default location  of
			  "hints"  file.  This variable	is unset for set-user-
			  ID and set-group-ID programs.

       LD_LIBRARY_PATH	  A colon separated list  of  directories,  overriding
			  the  default search path for shared libraries.  This
			  variable is unset for	set-user-ID  and  set-group-ID
			  programs.

       LD_LIBRARY_PATH_RPATH
			  If  the variable is specified	and has	a value	start-
			  ing with any of 'y', 'Y' or '1'  symbols,  the  path
			  specified  by	LD_LIBRARY_PATH	variable is allowed to
			  override the path from DT_RPATH for  binaries	 which
			  does not contain DT_RUNPATH tag.  For	such binaries,
			  when	the variable LD_LIBRARY_PATH_RPATH is set, "-z
			  nodefaultlib"	link-time option is ignored as well.

       LD_PRELOAD	  A list of  shared  libraries,	 separated  by	colons
			  and/or white space, to be linked in before any other
			  shared libraries.  If	the directory is not specified
			  then	the  directories  specified by LD_LIBRARY_PATH
			  will be searched first followed by the set of	built-
			  in standard directories.  This variable is unset for
			  set-user-ID and set-group-ID programs.

       LD_BIND_NOW	  When set to a	nonempty string, causes	ld-elf.so.1 to
			  relocate all external	function calls before starting
			  execution of the program.  Normally, function	 calls
			  are  bound  lazily,  at the first call of each func-
			  tion.	 LD_BIND_NOW increases the start-up time of  a
			  program,  but	it avoids run-time surprises caused by
			  unexpectedly undefined functions.

       LD_TRACE_LOADED_OBJECTS
			  When set to a	nonempty string, causes	ld-elf.so.1 to
			  exit after loading the shared	objects	and printing a
			  summary which	includes the absolute pathnames	of all
			  objects, to standard output.

       LD_TRACE_LOADED_OBJECTS_ALL
			  When set to a	nonempty string, causes	ld-elf.so.1 to
			  expand the summary to	indicate which objects	caused
			  each object to be loaded.

       LD_TRACE_LOADED_OBJECTS_FMT1

       LD_TRACE_LOADED_OBJECTS_FMT2
			  When	set, these variables are interpreted as	format
			  strings a la printf(3) to customize the trace	output
			  and are used by ldd(1)'s -f option and allows	ldd(1)
			  to be	operated as a filter  more  conveniently.   If
			  the	dependency   name   starts  with  string  lib,
			  LD_TRACE_LOADED_OBJECTS_FMT1	is   used,   otherwise
			  LD_TRACE_LOADED_OBJECTS_FMT2 is used.	 The following
			  conversions can be used:

			  %a	The   main   program's	name  (also  known  as
				"__progname").

			  %A	The  value   of	  the	environment   variable
				LD_TRACE_LOADED_OBJECTS_PROGNAME.    Typically
				used to	print both the names of	 programs  and
				shared libraries being inspected using ldd(1).

			  %o	The library name.

			  %p	The  full pathname as determined by rtld's li-
				brary search rules.

			  %x	The library's load address.

			  Additionally,	`\n' and `\t' are recognized and  have
			  their	usual meaning.

       LD_UTRACE	  If  set,  ld-elf.so.1	 will  log  events such	as the
			  loading  and	unloading  of	shared	 objects   via
			  utrace(2).

       LD_LOADFLTR	  If  set,  ld-elf.so.1	will process the filtee	depen-
			  dencies of the loaded	objects	 immediately,  instead
			  of postponing	it until required.  Normally, the fil-
			  tees are opened at the time of the first symbol res-
			  olution from the filter object.

FILES
       /var/run/ld-elf.so.hints	   Hints file.
       /var/run/ld-elf32.so.hints  Hints  file	for  32-bit binaries on	64-bit
				   system.
       /etc/libmap.conf		   The libmap configuration file.
       /etc/libmap32.conf	   The libmap configuration  file  for	32-bit
				   binaries on 64-bit system.

SEE ALSO
       ld(1), ldd(1), elf(5), libmap.conf(5), ldconfig(8)

FreeBSD	10.1			 June 28, 2012			       RTLD(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rtld&sektion=1&manpath=FreeBSD+10.1-RELEASE>

home | help