我认为 LD_LIBRARY 应该只用于测试而不是最终安装,因为它允许在使用标准库位置之前使用指定的库。但是 linux 文档项目对 LD_LIBRARY_PATH 进行了说明,并且比我更清楚地说明了这一点。
3.3.1。LD_LIBRARY_PATH
您可以临时用不同的库替换此特定执行。在 Linux 中,环境变量 LD_LIBRARY_PATH 是一组以冒号分隔的目录,应首先在其中搜索库,然后是标准目录集;这在调试新库或出于特殊目的使用非标准库时很有用。环境变量 LD_PRELOAD 列出了具有覆盖标准集的函数的共享库,就像 /etc/ld.so.preload 一样。这些由加载程序/lib/ld-linux.so 实现。我应该注意,虽然 LD_LIBRARY_PATH 可以在许多类 Unix 系统上工作,但它并不适用于所有系统。例如,此功能在 HP-UX 上可用,但作为环境变量 SHLIB_PATH,而在 AIX 上,此功能是通过变量 LIBPATH(使用相同的语法,
LD_LIBRARY_PATH 便于开发和测试,但不应通过安装过程修改以供普通用户正常使用;有关原因的解释,请参见http://www.visi.com/~barr/ldpath.html上的“为什么 LD_LIBRARY_PATH 不好”
。但它对于开发或测试以及解决其他无法解决的问题仍然很有用。如果您不想设置 LD_LIBRARY_PATH 环境变量,在 Linux 上您甚至可以直接调用程序加载器并为其传递参数。例如,以下将使用给定的 PATH 而不是环境变量 LD_LIBRARY_PATH 的内容,并运行给定的可执行文件:
/lib/ld-linux.so.2 --library-path 路径可执行文件
只执行不带参数的 ld-linux.so 将为您提供更多使用它的帮助,但同样,不要将其用于正常使用 - 这些都是用于调试的。
2013 年 8 月 13 日取自:http ://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
文档内的链接是旧的,在这里找到了预期的文章:http: //xahlee.info/UnixResource_dir/_/ldpath.html
编辑
您可以覆盖程序在构建/安装期间链接到的库,因为ld.so
在运行时查找要加载的库的顺序。在环境变量 LD_LIBRARY_PATH 中指定的位置找到的库将被加载,而不是指定默认路径的库(/lib
和/usr/lib
)
从man 8 ld.so
ld.so loads the shared libraries needed by a program, prepares the pro‐
gram to run, and then runs it. Unless explicitly specified via the
-static option to ld during compilation, all Linux programs are incom‐
plete and require further linking at run time.
The necessary shared libraries needed by the program are searched for
in the following order
o Using the environment variable LD_LIBRARY_PATH
(LD_AOUT_LIBRARY_PATH for a.out programs). Except if the exe‐
cutable is a setuid/setgid binary, in which case it is ignored.
o From the cache file /etc/ld.so.cache which contains a compiled
list of candidate libraries previously found in the augmented
library path. Libraries installed in hardware capabilities
directories (see below) are prefered to other libraries.
o In the default path /lib, and then /usr/lib.