linux系统中共享库(library dynamic)管理

程序运行时通过动态链接器查找共享库(.so 文件),查找路径由配置文件和缓存共同决定


1.关键工具与文件

名称 类型 作用
ldd <命令> 命令 列出某可执行文件依赖的所有共享库
/etc/ld.so.conf 配置文件 声明库搜索路径
/etc/ld.so.conf.d/*.conf 配置文件 补充库搜索路径(推荐方式)
/etc/ld.so.cache 缓存文件 ldconfig 生成,加速运行时库查找
ldconfig 命令 扫描路径、更新缓存、建立符号链接

2.标准操作流程

2.1排查库依赖问题

1
2
3
# 查看某命令依赖哪些库,缺哪些
ldd /usr/bin/some_command
# 输出中若出现 "not found",即缺失库

2.2添加新库路径

1
2
3
4
5
# 新建配置文件,写入库所在目录
echo "/opt/mysql/lib" > /etc/ld.so.conf.d/mysql.conf

# 重新生成缓存(必须执行)
ldconfig -v

3.操作数据流

新增 .so 文件
      │
      ▼
写入 /etc/ld.so.conf.d/xxx.conf
      │
      ▼
  ldconfig -v
      │
      ▼
 /etc/ld.so.cache 更新
      │
      ▼
  运行时自动找到新库

4.常见陷阱

  • 编译安装软件后运行报 shared library not found → 路径已配但忘了 ldconfig
  • 修改了 ld.so.conf 但没刷新 → 同上,必须执行 ldconfig
  • ldd 显示 not found,但文件确实在磁盘上 → 库路径未写入配置,或缓存未刷新
  • 多版本库共存 → 用 ldconfig -p \| grep <库名> 查看缓存中实际加载的路径