1. ldconfig
-
作用 :
ldconfig
是一个系统工具,用于配置动态链接器的运行时绑定,主要用于更新 共享库的缓存 和 创建符号链接 。它让系统知道哪里可以找到已安装的共享库,并将这些信息存储在/etc/ld.so.cache
中,以供后续使用。 -
操作流程:
- 更新缓存 :
ldconfig
扫描系统指定的目录(通常是/lib
和/usr/lib
等),并更新动态链接器的缓存,记录所有共享库的位置。 - 创建符号链接 :它为库文件创建符号链接,以确保能够找到库的不同版本。例如,
libexample.so.1
可能有一个符号链接libexample.so
,让程序可以找到最新版本的库。 - 维护系统级的共享库查找机制 :
ldconfig
的配置通常是系统范围的,影响整个操作系统中程序的动态链接。
- 更新缓存 :
-
常见用法:
- 更新库缓存:
sudo ldconfig
- 查看已缓存的库:
ldconfig -p
- 添加自定义库目录(临时更新):
sudo ldconfig /path/to/my/libs
- 更新库缓存:
-
作用范围 :
ldconfig
作用于 系统级别,它影响所有程序,确保系统上的所有程序都能找到并加载共享库。
2. export LD_LIBRARY_PATH
-
作用 :
LD_LIBRARY_PATH
是一个环境变量,用于指定动态链接器在运行程序时查找共享库的额外路径。它告诉程序在默认库路径之外的其他位置查找共享库。 -
操作流程:
- 指定额外库路径 :通过设置
LD_LIBRARY_PATH
,你可以告诉程序在启动时查找特定的共享库位置,而不依赖默认的库目录。 - 临时生效 :
LD_LIBRARY_PATH
环境变量的设置通常是临时的,意味着它只在当前会话或程序运行期间有效。如果你关闭终端或重启系统,设置的LD_LIBRARY_PATH
会丢失。
- 指定额外库路径 :通过设置
-
常见用法:
-
临时设置环境变量并运行程序:
bashexport LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH ./myprogram
-
只在当前会话中生效,如果希望长期生效,可以将它添加到
~/.bashrc
或~/.bash_profile
中。
-
-
作用范围 :
LD_LIBRARY_PATH
只对 当前用户 或 当前进程 (及其子进程)有效,它 不会 全局修改库的查找路径。
主要区别总结:
功能 | ldconfig |
export LD_LIBRARY_PATH |
---|---|---|
目的 | 更新共享库缓存并创建符号链接,配置动态链接器 | 设置库的查找路径,告知程序在哪里查找库 |
作用范围 | 系统级别,影响整个系统的共享库查找 | 仅对当前会话或进程有效 |
永久性 | 是永久性的,一旦执行更新,影响系统的所有程序 | 临时性,需要在每次会话中重新设置,除非添加到配置文件中 |
操作对象 | 更新系统的动态链接器缓存 /etc/ld.so.cache |
改变程序运行时查找共享库的路径 |
使用场景 | 安装新库后,更新系统库缓存和符号链接 | 需要临时或手动指定额外的库目录 |
什么时候使用 ldconfig
和 LD_LIBRARY_PATH
?
-
使用
ldconfig
:- 当你安装新的共享库并希望系统能够找到这些库时,或者在系统级别修改了库路径(例如添加自定义库路径)时,你需要使用
ldconfig
来更新缓存。 - 它适用于 系统级的库管理,如安装新的库包、配置新的库目录等。
- 当你安装新的共享库并希望系统能够找到这些库时,或者在系统级别修改了库路径(例如添加自定义库路径)时,你需要使用
-
使用
LD_LIBRARY_PATH
:- 当你只需要为单个程序或当前会话临时指定共享库路径时,使用
LD_LIBRARY_PATH
。这通常用于:- 在特定路径下查找库(例如,开发过程中)。
- 临时使用某个版本的库,而不修改系统配置。
- 当你只需要为单个程序或当前会话临时指定共享库路径时,使用
结论
ldconfig
主要用于 系统级管理 和 永久性的库路径配置,它更新缓存并确保系统上的所有程序能够找到共享库。LD_LIBRARY_PATH
是一种 临时的 方法,用来为 特定进程 指定额外的库查找路径。