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

Linux 库文件的查看和管理

    • Linux 库文件说明
      • 1、库文件的类型
      • 2、库文件存储路径
      • 3、库文件查找顺序
    • Linux 库文件管理
      • 1、查看动态库相关信息
      • 2、添加动态库查找路径

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.cacheldconfig 命令生成,记录常用库路径,会从这里面指定的路径查找库文件
默认路径/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/lslinux-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
http://www.xdnf.cn/news/12036.html

相关文章:

  • 解决 Java 项目中 “zip END header not found“ 错误
  • 【el-progress】element UI 进度条组件
  • 易基因:贵州省医刘代顺团队MeRIP-seq揭示m6A修饰在病毒感染中的免疫调控作用 | 项目文章
  • AI Agent 能否理解人类的行为和决策?
  • Java - 数组
  • 【docker】Windows安装docker
  • [Java 基础]抽象类和接口
  • 马尔可夫链(Markov Chain)和马尔可夫决策过程(Markov Decision Process, MDP)
  • ST语言控制电机往返运动
  • Flink进阶之路:解锁大数据处理新境界
  • 背景扩充:糖苷键的类型与表示方法 +python实现对糖分子名称的读取
  • JAVA容器
  • 从零开始:用Tkinter打造你的第一个Python桌面应用
  • 自驾总结_Routing
  • linux——账号和权限的管理
  • day46 python预训练模型补充
  • Vue3中Ant-design-vue的使用-附完整代码
  • 谷歌浏览器油猴插件安装方法
  • TongNCS 控制台没有显示验证码的解决方案(by sy+lqw)
  • 生成式AI驱动的智能采集实战
  • 6.4本日总结
  • MySQL权限详解
  • OD 算法题 B卷【查找舆情热词】
  • 直播美颜SDK深度解析:AI人脸美型与智能美白技术揭秘
  • c++ 命名规则
  • 浅析EXCEL自动连接PowerBI的模板
  • SCI论文核心框架与写作要素小结
  • Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
  • Java面试高频核心内容
  • GRU 参数梯度推导与梯度消失分析