Lig*_*ica 8 linux dynamic-linking
DTU计算中心的博客文章" LD_LIBRARY_PATH - 或:如何让自己陷入麻烦! "中说:
3.不一致:这是最常见的问题.
LD_LIBRARY_PATH强制应用程序加载未链接的共享库,这很可能与原始版本不兼容.这可能是非常明显的,即应用程序崩溃,或者它可能导致错误的结果,如果拾取的库不能完全执行原始版本.特别是后者有时难以调试.
这是真的吗?LD_LIBRARY_PATH允许我们修改动态库的搜索路径,但它是否真的抑制了确保二进制兼容性的soname查找?
(因为根据我的解释,程序库HOWTO没有说任何这样的事情.)
或者作者是不是意识到维护一致的库版本控制方案的概念,因此假设有一个未用于所讨论的库?
我认为LD_LIBRARY应仅用于测试而不是用于最终安装,因为它允许在使用标准库位置之前使用指定的库.但是linux文档项目说的是关于LD_LIBRARY_PATH的,并且比我更清楚.
3.3.1.LD_LIBRARY_PATH
您可以临时替换其他库以执行此特定执行.在Linux中,环境变量LD_LIBRARY_PATH是一组冒号分隔的目录,其中应首先在标准目录集之前搜索库; 这在调试新库或使用非标准库用于特殊目的时非常有用.环境变量LD_PRELOAD列出了具有覆盖标准集的函数的共享库,就像/etc/ld.so.preload那样.这些是由loader /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 PATH EXECUTABLE
只是在没有参数的情况下执行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查找要在运行时加载的库的顺序.在de环境变量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.
Run Code Online (Sandbox Code Playgroud)