Directories Searched by the Runtime Linker
The runtime linker looks in two default
locations for dependencies. When processing 32-bit
objects, the default locations are /lib
and /usr/lib
. When processing
64-bit objects, the default locations are
/lib/64
and
/usr/lib/64
. All other
directories to be searched must be added to the runtime
linker search path explicitly.
When a dynamic object is linked with additional shared objects, the shared objects are recorded as dependencies. These dependencies must be located during process execution by the runtime linker. When linking a dynamic object, one or more search paths can be recorded in the output file. These search paths are referred to as a runpath . The runtime linker uses the runpath of an object to locate the dependencies of that object.
Specialized objects can be built with the
-z nodefaultlib
option to
suppress any search of the default location at runtime. Use
of this option implies that all the dependencies of an
object can be located using its runpaths.
Without this option, no matter how you augment the runtime
linker search path, the last search paths used are always
the default locations.
Note:
The default search path can be administrated by using a runtime configuration file. See Configuring the Default Search Paths. However, the creator of a dynamic object should not rely on the existence of this file. You should always ensure that an object can locate its dependencies with only its runpaths or the default locations.You can use the -R
option, which
takes a colon-separated list of directories, to record a
runpath in a
dynamic object. The following
example records the
runpath
/home/me/lib:/home/you/lib
in the
dynamic executable prog
.
$ cc -o prog main.c -R/home/me/lib:/home/you/lib -Lpath1 \
-Lpath2 file1.c file2.c -lfoo -lbar
The runtime linker uses these paths, followed by the default
location, to obtain any shared object dependencies. In this
case, this runpath is used to locate
libfoo.so.1
and
libbar.so.1
.
The link-editor accepts multiple -R
options.
These multiple specifications are concatenate together,
separated by a colon. Thus, the previous example can also be
expressed as follows.
$ cc -o prog main.c -R/home/me/lib -Lpath1 -R/home/you/lib \
-Lpath2 file1.c file2.c -lfoo -lbar
For objects that can be installed in various locations, the
$ORIGIN
dynamic string token
provides a flexible means of recording a
runpath. See Locating Associated Dependencies.
Note:
A historic alternative to specifying the-R
option is to set the
environment variable LD_RUN_PATH
, and
make this available to the link-editor. The scope
and function of LD_RUN_PATH
and
-R
are identical, but when both
are specified, -R
supersedes
LD_RUN_PATH
.