ldconfig
命令的用途主要是在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如 lib*.so*),进而创建出动态装入程序(ld.so)所需的连接(快捷方式)和缓存文件。
缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig
,此执行程序存放在 /sbin 目录下。
ldconfig
通常在系统启动时运行;用户安装了一个新的动态链接库时,就需要手工运行这个命令才能生效。
ldconfig
只与程序运行时有关(运行时库管理:装载),跟程序构建(编译&链接)一点关系都没有,构建的时候还是该加 -$l$(链接)就得加,不要混淆了。
ldconfig 命令
- 更新动态链接库缓存文件
-
1
2
3# ldconfig 将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字。
ldconfig -v
ldconfig -verbose
- 获取 /etc/ld.so.cache 缓存文件动态链接库列表
-
1
2
3# 此选项指示 ldconfig 打印出当前缓存文件所保存的所有共享库的名字
ldconfig -p
ldconfig --print-cache
- 其他选项
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24-n:
用此选项时,ldconfig仅扫描命令行指定的目录
不扫描默认目录(/lib、/usr/lib),也不扫描配置文件/etc/ld.so.conf 所列的目录
-N:
此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache)
若未用-X选项,ldconfig照常更新文件的连接
-X:
此选项指示ldconfig不更新文件的连接
若未用-N选项,则缓存文件正常更新
-f CONF:
此选项指定动态链接库的配置文件为CONF,系统默认为 /etc/ld.so.conf
-C CACHE:
此选项指定生成的缓存文件为CACHE,系统默认的是 /etc/ld.so.cache
/etc/ld.so.cache 文件存放已排好序的可共享的动态链接库的列表
-r ROOT:
此选项改变应用程序的根目录为 ROOT(是调用chroot函数实现的);
选择此项时,系统默认的配置文件/etc/ld.so.conf,实际对应的为ROOT/etc/ld.so.conf;
用此选项,可以大大增加动态链接库管理的灵活性
-l:
通常情况下,ldconfig搜索动态链接库时将自动建立动态链接库的连接,
选择此项时,将进入专家模式,需要手工设置连接,一般用户不用此项
-c FORMAT 或 --format=FORMAT:
此选项用于指定缓存文件所使用的格式
共有三种:old(老格式),new(新格式)和compat(兼容格式,此为默认格式)
几个需要注意的地方
- 往/lib 和 /usr/lib 里面加东西,是不用修改 /etc/ld.so.conf 的,但是完了之后要调一下
ldconfig
,不然这个库会找不到。 - 往/lib 和 /usr/lib 两个目录以外放 lib 的时候,一定要修改 /etc/ld.so.conf,然后再调用
ldconfig
,不然也会找不到。例如:安装了一个 mysql 到 /usr/local/mysql,mysql 有一大堆 library 在 /usr/local/mysql/lib 下面,这时就需要在 /etc/ld.so.conf文件末尾追加一行 /usr/local/mysql/lib,保存过后
ldconfig
一下,新的 library 才能在程序运行时被找到 - 往/lib 和 /usr/lib 这两个目录以外放 lib,但是又不想在 /etc/ld.so.conf 中加东西(或者是没有权限加东西),可以通过 export 一个全局变量
LD_LIBRARY_PATH
,然后运行程序的时候就会去这个目录中找 library;一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。