Linux 库文件的查看和管理

发布于:2025-06-07 ⋅ 阅读:(14) ⋅ 点赞:(0)

Linux 库文件说明

1、库文件的类型

Linux 中的库文件本质上就是封装好的功能模块,某个应用程序如果要实现某个功能,只需要调用现有库文件就可以直接使用,这样就避免了重复开发。Linux 中的库文件分为两种类型:

  • 静态库:以 .a 结尾。程序编译时,编译器会把需要的函数代码直接复制进可执行文件。所以程序编译完成后,静态库不存在不影响程序运行。
  • 动态库:以 .so 结尾。程序编译时,编译器只记录一个引用,程序运行时才通过动态链接器加载对应的 .so 文件,后续程序运行时需要保证动态库能被找到。

2、库文件存储路径

路径 用途说明
/lib 、/lib64 存放操作系统引导和基本运行时所需的共享库
/usr/lib、/usr/lib64 存放通过包管理器(如 apt、yum)安装的软件的库文件
/usr/local/lib 存放用户通过源码编译安装的软件所使用的库
自定义路径 存放特定工程项目的私有库文件。

3、库文件查找顺序

Linux 中某个应用进程运行时加载动态库时,实际是通过 动态链接器 来实现库的查找和加载,动态链接器 会按照一下的顺序来查找库文件。

查找顺序 查找方式 说明
编译时 指定的路径 如果编译时制定了查找库文件的路径,会从指定的路径下查找
环境变量 LD_LIBRARY_PATH 用于临时指定优先搜索的库路径,开发和调试常用,一般为空。
系统库缓存 /etc/ld.so.cache ldconfig 命令生成,记录常用库路径,会从这里面指定的路径查找库文件
默认路径/lib, /lib64, /usr/lib 由动态链接器写死(内置)的默认库查找路径

Linux 库文件管理

1、查看动态库相关信息

查看 动态链接器写死(内置)的默认库查找路径

ld --verbose | grep SEARCH_DIR

查看硬盘上是否存在对应的库文件

# ldconfig -v 是显示所有已经存在在硬盘上的库文件,不管是否被加载
sudo ldconfig -v | grep name

查看某个库文件是否已经被系统加载

# ldconfig -p 显示的是所有已被系统动态链接器“识别并缓存”的动态库文件
sudo ldconfig -p | grep name

查看一个可执行程序运行时会使用哪些 动态链接库(.so),以及是否正常加载

ldd /path
  • 有 => 指向路径:表示动态链接器在磁盘上找到了对应的库文件
  • 无 => 指向路径:是虚拟动态共享对象,内核提供,不是实际的磁盘文件
  • 输出中包含=> not found:表示找不到该动态库,程序运行时会报错

例如:查看 ls 会使用哪些动态库文件:

root@ubuntu:~# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007ffee1127000)
	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fe20f017000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe20ee25000)
	libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007fe20ed94000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe20ed8e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fe20f07e000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe20ed6b000)

2、添加动态库查找路径

除了 由动态链接器写死(内置)的默认库查找路径外,还可以通过 ldconfig 来指定应用程序查找共享库的路径:

(1)将库路径写入配置文件 /etc/ld.so.conf/etc/ld.so.conf.d/*.conf
例如:

/usr/local/python3/lib
/usr/local/ffmpeg/lib

(2)执行 ldconfig 命令,生成或更新 /etc/ld.so.cache,这样系统就能通过缓存文件 /etc/ld.so.cache 快速查找到动态库。

sudo ldconfig