Name
ld.so, ld-linux.so* — dynamic linker/loader
SYNOPSIS
The dynamic linker can be run either indirectly through
running some dynamically linked program or library (in which
case no command line options to the dynamic linker can be
passed and, in the ELF case, the dynamic linker which is
stored in the .interp section of the
program is executed) or directly by running:
/lib/ld-linux.so.* [OPTIONS]
[PROGRAM [ARGUMENTS]]
DESCRIPTION
The programs ld.so and ld-linux.so* find and load
the shared libraries needed by a program, prepare the program
to run, and then run it.
Linux binaries require dynamic linking (linking at run
time) unless the −static
option was given to ld during compilation.
The program ld.so handles a.out binaries, a
format used long ago; ld-linux.so* handles ELF
(/lib/ld-linux.so.1 for libc5,
/lib/ld-linux.so.2 for glibc2),
which everybody has been using for years now. Otherwise both
have the same behaviour, and use the same support files and
programs ldd(1), ldconfig(8) and
/etc/ld.so.conf.
The shared libraries needed by the program are searched
for in various places:
-
(ELF only) Using the DT_RPATH dynamic section
attribute of the binary if present and DT_RUNPATH
attribute does not exist. Use of DT_RPATH is
deprecated.
-
Using the environment variable LD_LIBRARY_PATH. Except if the
executable is a set-user-ID/set-group-ID binary, in
which case it is ignored.
-
(ELF only) Using the DT_RUNPATH dynamic section
attribute of the binary if present.
-
From the cache file /etc/ld.so.cache which contains a
compiled list of candidate libraries previously found
in the augmented library path. If, however, the binary
was linked with −z
nodeflib linker option, libraries in the default
library paths are skipped.
-
In the default path /lib, and then /usr/lib. If the binary was linked
with −z nodeflib
linker option, this step is skipped.
$ORIGIN and rpath
ld.so
understands the string $ORIGIN (or equivalently
${ORIGIN}) in an
rpath specification (DT_RPATH or DT_RUNPATH) to mean the
directory containing the application executable. Thus, an
application located in somedir/app could be
compiled with gcc
-Wl,-rpath,'$ORIGIN/../lib' so that it finds an
associated shared library in somedir/lib no matter where
somedir is
located in the directory hierarchy. This facilitates the
creation of "turn-key" applications that do not need to be
installed into special directories, but can instead be
unpacked into any directory and still find their own shared
libraries.
OPTIONS
−−list
-
List all dependencies and how they are resolved.
−−verify
-
Verify that program is dynamically linked and this
dynamic linker can handle it.
−−library−pathPATH
-
Override LD_LIBRARY_PATH environment variable
setting (see below).
−−inhibit−rpathLIST
-
Ignore RPATH and RUNPATH information in object names
in LIST.
ENVIRONMENT
There are four important environment variables.
LD_LIBRARY_PATH
-
A colon-separated list of directories in which to
search for ELF libraries at execution-time. Similar to
the PATH environment
variable.
LD_PRELOAD
-
A whitespace-separated list of additional,
user-specified, ELF shared libraries to be loaded
before all others. This can be used to selectively
override functions in other shared libraries. For
set-user-ID/set-group-ID ELF binaries, only libraries
in the standard search directories that are also
set-user-ID will be loaded.
LD_BIND_NOW
-
(libc5; glibc since 2.1.1) If set to non-empty
string, causes the dynamic linker to resolve all
symbols at program startup instead of deferring
function call resolval to the point when they are first
referenced. This is useful when using a debugger.
LD_TRACE_LOADED_OBJECTS
-
(ELF only) If set to non-empty string, causes the
program to list its dynamic library dependencies, as if
run by ldd(1), instead of
running normally.
Then there are lots of more or less obscure variables,
many obsolete or only for internal use.
LD_WARN
-
(ELF only)(glibc since 2.1.3) If set to non-empty
string, warn about unresolved symbols.
LD_NOWARN
-
(a.out only)(libc5) Suppress warnings about a.out
libraries with incompatible minor version numbers.
LD_BIND_NOT
-
(glibc since 2.1.95) Do not update the GOT (global
offset table) and PLT (procedure linkage table) after
resolving a symbol.
LD_DEBUG
-
(glibc since 2.1) Output verbose debugging
information about the dynamic linker. If set to
all prints
all debugging information it has, if set to help prints a help
message about which categories can be specified in this
environment variable.
LD_DEBUG_OUTPUT
-
(glibc since 2.1) File where LD_DEBUG output should be fed into,
default is standard output. LD_DEBUG_OUTPUT is ignored
for set-user-ID/set-group-ID binaries.
LD_VERBOSE
-
(glibc since 2.1) If set to non-empty string, output
symbol versioning information about the program if
querying information about the program (ie. either
LD_TRACE_LOADED_OBJECTS
has been set, or −−list or −−verify options have been
given to the dynamic linker).
LD_PROFILE
-
(glibc since 2.1) Shared object to be profiled.
LD_PROFILE_OUTPUT
-
(glibc since 2.1) File where LD_PROFILE output should be stored,
default is standard output. LD_PROFILE_OUTPUT is
ignored for set-user-ID/set-group-ID binaries.
LD_AOUT_LIBRARY_PATH
-
(libc5) Version of LD_LIBRARY_PATH for a.out
binaries only. Old versions of ld−linux.so.1 also
supported LD_ELF_LIBRARY_PATH.
LD_AOUT_PRELOAD
-
(libc5) Version of LD_PRELOAD for a.out binaries
only. Old versions of ld−linux.so.1 also
supported LD_ELF_PRELOAD.
LD_SHOW_AUXV
-
(glibc since 2.1) Show auxiliary array passed up
from the kernel.
LD_HWCAP_MASK
-
(glibc since 2.1) Mask for hardware
capabilities.
LD_ORIGIN_PATH
-
(glibc since 2.1) Path where the binary is found
(for non-set-user-ID programs).
LD_DYNAMIC_WEAK
-
(glibc since 2.1.91) Allow weak symbols to be
overridden (reverting to old glibc behaviour).
LD_KEEPDIR
-
(a.out only)(libc5) Don't ignore the directory in
the names of a.out libraries to be loaded. Use of this
option is strongly discouraged.
LDD_ARGV0
-
(libc5) argv[0] to be used by
ldd(1) when none is
present.
FILES
/lib/ld.so
-
a.out dynamic linker/loader
/lib/ld−linux.so.{1,2}
-
ELF dynamic linker/loader
/etc/ld.so.cache
-
File containing a compiled list of directories in
which to search for libraries and an ordered list of
candidate libraries.
/etc/ld.so.preload
-
File containing a whitespace separated list of ELF
shared libraries to be loaded before the program.
- lib*.so*
-
shared libraries
NOTES
The ld.so
functionality is available for executables compiled using
libc version 4.4.3 or greater. ELF functionality is available
since Linux 1.1.52 and libc5.
SEE ALSO
ldd(1), ldconfig(8)
This is in the public domain
|