[Qt5-feedback] Fwd: Re: Qt major versions
Craig.Scott at csiro.au
Craig.Scott at csiro.au
Thu Jun 9 00:24:21 CEST 2011
On 09/06/2011, at 5:31 AM, Till Oliver Knoll wrote:
Yeah, I just checked the ld man pages. For the sake of completeness:
"The linker uses the following search paths to locate required shared
libraries:
1. Any directories specified by -rpath-link options.
2. Any directories specified by -rpath options. [...]
3. On an ELF system, for native linkers, if the -rpath and
-rpath-link options were not used, search
the contents of the environment variable "LD_RUN_PATH".
4. On SunOS, if the -rpath option was not used, search any
directories specified using -L options.
5. For a native linker, the search the contents of the environment
variable "LD_LIBRARY_PATH".
6. For a native ELF linker, the directories in "DT_RUNPATH" or
"DT_RPATH" of a shared library are searched for shared libraries
needed by it. The "DT_RPATH" entries are ignored if "DT_RUNPATH"
entries exist.
7. The default directories, normally /lib and /usr/lib.
8. For a native linker on an ELF system, if the file /etc/ld.so.conf
exists, the list of directories found in that file.
"
So RPATH is evaluated before LD_LIBRARY_PATH, and the newer RUNPATH is
evaluated after LD_LIBRARY_PATH (and disables the RPATH entry, if present).
Ah, but ld is not ld.so or ld-linux.so! The ordering you list above applies when you are *creating* your binaries, but the ordering used when *running* your binaries is a bit different. Here's the runtime ordering as specified in the ld.so (or ld-linux.so) man page:
The shared libraries needed by the program are searched for in the following order:
o (ELF only) Using the directories specified in the DT_RPATH dynamic section attribute of the binary if present
and DT_RUNPATH attribute does not exist. Use of DT_RPATH is deprecated.
o 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.
o (ELF only) Using the directories specified in the DT_RUNPATH dynamic section attribute of the binary if
present.
o 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 the -z nodeflib linker option, libraries
in the default library paths are skipped.
o In the default path /lib, and then /usr/lib. If the binary was linked with the -z nodeflib linker option, this
step is skipped.
I'm sure there are (hopefully good!) reasons why ld and ld.so/ld-linux.so use different search orders, but it sure does add to the confusion. The above list is also immediately followed by a description of the $ORIGIN feature.
--
Dr Craig Scott
Computational Software Engineering Team Leader, CSIRO (CMIS)
Melbourne, Australia
More information about the Qt5-feedback
mailing list