当前位置: 首页 > article >正文

认识ldconfig,不仅仅可以用于查看库的版本

ldconfig 是 Linux 系统中的一个重要命令,用于管理动态链接库的缓存和符号链接。它的主要作用是确保系统能够正确地找到并加载动态库(共享库),特别是当你安装了新的库或更改了库的位置时。
以前我们一直用这个功能去查找某一个库的版本号,比如:

ldconfig -p | grep vtk

响应输出一般类似这种:

    ibvtkCommonColorTCL-7.1.so.7.1p (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColorTCL-7.1.so.7.1p
	libvtkCommonColorTCL-7.1.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColorTCL-7.1.so
	libvtkCommonColorPython310D-7.1.so.7.1p (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColorPython310D-7.1.so.7.1p
	libvtkCommonColorPython310D-7.1.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColorPython310D-7.1.so
	libvtkCommonColor-7.1.so.7.1p (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColor-7.1.so.7.1p
	libvtkCommonColor-7.1.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libvtkCommonColor-7.1.so

这样就能判断我们用的是哪一个版本的库

主要功能:

  1. 更新动态库缓存ldconfig 会扫描系统的标准库目录(如 /lib/usr/lib 等)和配置文件 /etc/ld.so.conf 中指定的目录,找到所有共享库,并将这些库的路径和文件名缓存到 /etc/ld.so.cache 文件中。这样,当程序运行时,系统能快速找到并加载这些共享库。

  2. 创建必要的符号链接:共享库文件通常会有版本号,而程序需要根据不同的库版本使用对应的库文件。ldconfig 还会自动创建符号链接,以确保应用程序能够使用正确版本的共享库。例如,libpcl.so.1.13 可能需要一个符号链接 libpcl.so,指向正确的库版本。

常用命令:

  • 更新库缓存

    sudo ldconfig
    

    这个命令会更新共享库缓存文件 /etc/ld.so.cache,并重新扫描配置文件中的库路径。

  • 指定额外的路径更新库

    sudo ldconfig /usr/local/lib
    

    如果你安装了库到自定义路径(例如 /usr/local/lib),可以使用这个命令将该路径的库文件添加到缓存中。

  • 查看当前库缓存中的库路径

    ldconfig -p
    

    这个命令会列出当前缓存中所有的共享库及其路径。你可以用 grep 来查找某个特定的库。

  • 添加新的库路径
    编辑 /etc/ld.so.conf/etc/ld.so.conf.d/ 下的文件,添加新的库目录,然后运行 sudo ldconfig 来更新缓存。

为什么需要 ldconfig

当你安装或手动编译新的库文件后,系统可能无法立即识别这些库的位置。这是因为系统的库缓存没有及时更新,导致应用程序在运行时找不到所需的库。使用 ldconfig 可以重新更新库的缓存,让系统知道新的库文件的位置,确保程序能够正常运行。

典型使用场景:

  • 安装新库:当你安装了新的动态库(如通过源码编译安装的库),你需要运行 sudo ldconfig 来更新库缓存,让系统能够找到和加载这些库。
  • 手动指定库路径:如果你安装的库位于非标准目录(如 /opt/lib),你可以将这个路径添加到 /etc/ld.so.conf,并运行 sudo ldconfig 使其生效。
  • 调试库加载问题:当程序提示无法找到某个共享库时,使用 ldconfig -p 可以帮助你确认系统缓存中是否存在该库,或检查符号链接是否正确。

总之,ldconfig 是一个管理和更新共享库的重要工具,在确保程序正常使用动态库方面发挥着关键作用。


http://www.kler.cn/news/365201.html

相关文章:

  • 通过ssh端口反向通道建立并实现linux系统的xrdp以及web访问
  • LSTM反向传播及公式推导
  • 【MySQL数据库】MySQL高级语句(SQL语句进阶版)
  • 第五十四章 安全元素的详细信息 - DerivedKeyToken 详情
  • 关于写删除接口的一些理解
  • vue3移动端可同时上传照片和视频的组件
  • 力扣143:重排链表
  • 高可用之限流 09-guava RateLimiter 入门使用简介 源码分析
  • Linux系统下kazam生成的.mp4文件无法用window打开
  • 学习游戏测试需要掌握哪些基础技术?
  • django5入门【01】环境配置
  • 五大场景实践 深度解读指标平台业务价值
  • ffmpeg视频滤镜:平均模糊
  • 【系统架构设计师】一、绪论
  • 第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!
  • Android——应用安装
  • Paramiko实现SSH自动化实战教程
  • 2024-09学习笔记
  • TCP/UDP 通用通信代码库(C语言实现)
  • java高性能处理10G大文件
  • 使用Vue.js构建响应式Web应用
  • [DB] NSM
  • 【python openai function2json小工具】
  • 在PHP中,读取大文件
  • html+css+js实现Notification 通知
  • 洞察云上风险,主机安全尽在掌握