NotePublic/Software/Applications/Ldconfig/ldconfig_命令.md

37 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ldconfig 命令
ldconfig 命令的用途主要是在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如 lib*.so*, 进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache此文件保存已排好序的动态链接库名字列表为了让动态链接库为系统所共享需运行动态链接库的管理命令 ldconfig此执行程序存放在 /sbin 目录下。
ldconfig 通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
## 1.语法
```bash
ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] [-?|--help|--usage] path...
```
## 2.选项
* -v 或--verbose用此选项时ldconfig 将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字。
* -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此文件存放已排好序的可共享的动态链接库的列表。
* -r ROOT此选项改变应用程序的根目录为 ROOT是调用 chroot 函数实现的)。选择此项时,系统默认的配置文件 /etc/ld.so.conf实际对应的为 ROOT/etc/ld.so.conf。如用-r /usr/zzz 时,打开配置文件 /etc/ld.so.conf 时,实际打开的是 /usr/zzz/etc/ld.so.conf 文件。用此选项,可以大大增加动态链接库管理的灵活性。
* -l通常情况下 ,ldconfig 搜索动态链接库时将自动建立动态链接库的连接,选择此项时,将进入专家模式,需要手工设置连接,一般用户不用此项。
* -p 或--print-cache此选项指示 ldconfig 打印出当前缓存文件所保存的所有共享库的名字。
* -c FORMAT 或 --format=FORMAT此选项用于指定缓存文件所使用的格式共有三种old(老格式)new(新格式)和 compat兼容格式此为默认格式
* -V此选项打印出 ldconfig 的版本信息,而后退出。
* -? 或 --help 或 --usage这三个选项作用相同都是让 ldconfig 打印出其帮助信息,而后退出。
## 3.ldconfig 几个需要注意的地方
1. 往 /lib 和 /usr/lib 里面加东西,是不用修改 /etc/ld.so.conf 的,但是完了之后要调一下 ldconfig不然这个 library 会找不到。
2. 想往上面两个目录以外加东西的时候,一定要修改 /etc/ld.so.conf然后再调用 ldconfig不然也会找不到。
3. 比如安装了一个 mysql 到 /usr/local/mysqlmysql 有一大堆 library 在 /usr/local/mysql/lib 下面,这时就需要在 /etc/ld.so.conf 下面加一行 /usr/local/mysql/lib保存过后 ldconfig 一下,新的 library 才能在程序运行时被找到。
4. 如果想在这两个目录以外放 lib但是又不想在 /etc/ld.so.conf 中加东西(或者是没有权限加东西)。那也可以,就是 export 一个全局变量 LD_LIBRARY_PATH然后运行程序的时候就会去这个目录中找 library。一般来讲这只是一种临时的解决方案在没有权限或临时需要的时候使用。
5. ldconfig 做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L 就得加,不要混淆了。
6. 总之,就是不管做了什么关于 library 的变动后,最好都 ldconfig 一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
7. 再有,诸如 libdb-4.3.so 文件头中是会含有库名相关的信息的即含“libdb-4.3.so”可用 strings 命令察看),因此仅通过修改文件名以冒充某已被识别的库(如 libdb-4.8.so是行不通的。为此可在编译库的 Makefile 中直接修改配置信息,指定特别的库名。