ldconfig:[load]运行时库管理

  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;一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。

References

文章目录
  1. 1. ldconfig 命令
  2. 2. 几个需要注意的地方
  3. 3. References