ldconfig是linux提供的动态库配置工具,主要用来完成两个工作:
(1)配置动态库的搜索路径。
(2)加载动态库到系统缓存。
我们知道,Linux的共享库可以在进程之间共享,因此系统启动时,会预先根据动态库的配置文件加载所有配置的动态库。Linux的动态库默认是配置在 /etc/ld.so.conf 文件中(当然,可以通过 include 命令加载额外的配置文件),ldconfig读取所有配置路径,加载这些路径下的所有动态库,并保存到 /etc/ld.so.cache缓存文件中。
示例:有三个动态库文件 libtest.1.so,libtest.2.so,libtest.3.so,并且这三个动态库的SONAME都是 libtest.so。
(1)默认情况下,执行 $ ldconfig,会搜索 /etc/ld.so.conf 文件下配置的所有路径,更新软链,并更新 /etc/ld.so.cache 文件。
(2)-n dir选项:扫描指定目录dir下的所有so,根据文件名中的最新版本号,更新软链,并更新 /etc/ld.so.cache文件。如,
$ ldconfig -n ./ # 生成 libtest.so,libtest.so是一个软链接,指向版本号最大的动态库 libtest.3.so
$ ls -al
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.1.so
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.2.so
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.3.so
lrwxrwxrwx 1 yepanl yepanl 12 Oct 9 16:56 libtest.so -> libtest.3.so
(3)-l src dest选项:重新指定软链的连接目标。如,
$ ldconfig -l libtest.so libtest.2.so # 指定 libtest.so 链接到 libtest.2.so
$ ls -al
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.1.so
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.2.so
-rwxrwxr-x 1 yepanl yepanl 8612 Oct 8 11:38 libtest.3.so
lrwxrwxrwx 1 yepanl yepanl 12 Oct 9 16:59 libtest.so -> libtest.2.so
(4)-N选项:只更新软链接,不更新 /etc/ld.so.cache 缓存。如,在 /etc/lib.so.conf.d/ 目录下配置了 test.conf 文件,文件中配置了当前动态库的的路径。
$ sudo ldconfig -N # 生成 libtest.so,不更新 /etc/ld.so.cache 文件。
(5)-X选项:只更新 /etc/ld.so.cache 缓存,不更新软链接。如,在 /etc/lib.so.conf.d/ 目录下配置了 test.conf 文件,文件中配置了当前动态库的路径。
$ sudo ldconfig -X # 不生成 libtest.so,只更新 /etc/ld.so.cache 文件。
(6)-f config选项:搜索指定的 config 文件,而非 /etc/ld.so.conf 文件。如,当前目录下配置了 test.conf 文件,文件中配置了当前动态库的路径。
$ sudo ldconfig -f test.conf # 生成 libtest.so,更新 /etc/ld.so.cache 文件,只搜索 test.conf,不搜索 /etc/lib.so.conf
(7)-C cache选项:更新指定的 cache 文件,而非 /etc/ld.so.cache 文件。
关于这个选项,测试发现没有生成指定的 cache 文件,有待进一步验证。