概述

  • ldconfig 搜索 /lib/usr/lib/etc/ld.so.conf 文件内所列的目录,找到可共享的动态链接库,为动态装载程序 ld.so 创建所需的链接和缓存。

  • 缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

  • ldconfig 通常在系统启动时运行,当用户安装了一个新的动态链接库时,就需要手动运行这个命令。

参数

参数说明
-v显示正在扫描的目录及搜索到的动态链接库以及所创建的链接的名字
-n仅扫描命令行指定的目录,不扫描默认目录,也不扫描配置文件所列的目录
-N不重建缓存文件
-X不更新文件的链接
-f conf指定动态链接库的配置文件为 conf,系统默认是 /etc/ld.so.conf
-C cache指定生成的缓存文件为 cache,系统默认是 /etc/ld.so.cache
-r root改变应用程序的根目录为 root
-l进入专家模式手动设置链接
-p打印当前缓存文件
-c format指定缓存文件的格式
-V打印 ldconfig 版本信息
--help打印帮助信息

示例

libfoo.so 添加到系统共享库中:

# cp libfoo.so /usr/lib
# chmod 0755 /usr/lib/libfoo.so

更新共享库缓存列表:

# ldconfig

更新完成后检查(从当前缓存文件的中搜索 libfoo.so 库):

# ldconfig -p | grep foo
    libfoo.so (libc6) => /usr/lib/libfoo.so

LIBRARY_PATH 和 LD_LIBRARY_PATH 区别

  • LIBRARY_PATH:编译程序时用到

  • LD_LIBRARY_PATH:程序运行时用到

/etc/ld.so.confLD_LIBRARY_PATH 具有同等的作用,程序运行时链接库的时候,优先链接后者,即环境变量 LD_LIBRARY_PATH 目录下的库。如果不能满足一些共享库相关性要求,则转回到 /etc/ld.so.conf 中指定的库。

/etc/ld.so.confenv-update 生成,这些路径来自 /etc/env.d/ 下的文件,如下:

$ grep LDPATH /etc/env.d/ -r
/etc/env.d/60llvm-9985:LDPATH="/usr/lib/llvm/14/lib64"
/etc/env.d/50baselayout:LDPATH='/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib'
/etc/env.d/00glibc:LDPATH="include ld.so.conf.d/*.conf"
/etc/env.d/50rust-bin-1.60.0:LDPATH="/usr/lib/rust/lib"
/etc/env.d/gcc/x86_64-pc-linux-gnu-11.3.0:LDPATH="/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0:/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0/32"

如果修改了 /etc/env.d/ 下的文件,执行以下命令

# env-update
# ldconfig