『 Linux 』动态库的加载

文章目录

    • 动静态库的区别
    • 动态库-共享库
    • 动态库的加载
      • 动态库的管理
    • 总结


动静态库的区别

请添加图片描述

  • 动态库(Dynamic Libraries)

    • 链接方式

      动态链接,程序在运行时(而不是在编译时)与动态库链接;

      操作系统负责加载动态库文件;

    • 文件大小

      使用动态库的应用程序通常其可执行文件大小更小;

      因为库代码在运行时将会从单独的库文件进行加载;

    • 内存使用

      如果多个程序同时使用一个动态库,则该库在内存中只需要加载一次,节省系统资源;

    • 更新和发布

      更新动态库较为方便;

      只需替换动态库文件本身即可而不需要重新编译使用它的程序;

      使得动态库适用于需要频繁更新或者维护的软件组件;

  • 静态库(Static Libraries)

    • 链接方式

      静态链接,程序在编译时与静态库进行链接,静态库的代码数据被复制到最终的可执行文件中;

    • 文件大小

      使用静态库的应用程序通常会有更大的可执行文件,因为其静态库的代码和数据将被集中到应用程序中;

    • 内存使用

      每个使用静态库的应用程序都会有自己的库代码副本;

      在内存中可能会导致重复冗余的内容;

    • 更新和发布

      更新你需要使用到静态库的组件时必须重新编译整个程序;

      这意味着静态库适合不经常更新的库,或者用户希望应用程序是完全独立且不依赖外部其他库文件时;


动态库-共享库

请添加图片描述

与静态库不同,动态库在进程运行时要被加载;

一般情况下常见的动态库会被所有的可执行程序动态链接,故动态库又被称为共享库;

这意味着动态库在系统中加载后将会被所有的进程共享;

磁盘中的文件需要被管理,动态库是文件也需要被管理;

当一个可执行程序需要加载这个动态库时将会以特定的路径将动态库加载至内存;

若是一个可执行程序依赖于多个动态库时将会把这些依赖的动态库同样加载至内存当中;

这些被加载至内存的动态库将以 先描述再组织 的方式被操作系统进行管理,而若是有其他进程需要调用这些动态库时只需要间接在操作系统的管理下找到这个动态库并与其他进程进行共用即可;

动态库的共享属性主要围绕以下几点:

  • 资源共享

    动态库允许其代码在物理内存中至有一份拷贝而可以被多个正在运行的进程所共享;

    这种方式与静态库形成对比,静态库的代码被复制到每个使用它的可执行文件当中,导致相同的代码在内存中形成冗余;

    动态库通过减少重复的代码加载有效减少了系统的内存占用从而提高内存使用效率;

  • 动态链接

    程序在运行时加载动态库被称为动态链接,类比C++中的多态;

    这意味可执行程序将在运行时寻找并链接其依赖的动态库;

    它们可以在运行时共享这个库的同一个实例而不需要在每个程序中进行加载;

  • 跨进程共享

    操作系统负责管理动态库的链接和加载;

    当第一个程序请求加载特定的动态库时操作系统将会把这个动态库加载进内存并对其管理;

    此后如果有其他进程也依赖这个动态库时将直接在操作系统的管理下找到这个库并进行链接;

  • 减少磁盘和内存使用

    动态库通过其共享属性减少系统中重复的代码存储和加载从而介绍磁盘空间和运行时的内存占用;


动态库的加载

请添加图片描述

  • 可执行程序的执行

    用户请求执行一个可执行文件;

    当操作系统接收到执行请求时将会从文件系统重读取指定的可执行文件;

    这个文件包含了程序的代码数据以及其动态库的依赖信息;

  • 进程的创建

    • 创建进程控制块task_struct

      当程序被执行时其将加载进内存并成为进程;

      操作系统将会为新的进程分配一个task_struct结构体用于存储进程的所有信息;

      包括进程状态,PID,进程地址空间指针,页表指针等等;

    • 分配进程地址空间

      操作系统将会为进程分配一个虚拟地址空间并根据可执行文件的内容初始化代码段和数据段;

  • 动态库的加载

    加载器解析可执行文件中的动态库依赖信息,并根据依赖信息在磁盘上查找对应的动态库文件;

    这个过程可能会参考LD_LIBRARY_PATH环境变量,/etc/ld.so.cache文件以及标准路径如/lib64//usr/lib;

    找到动态库文件后,加载器将会把动态库的内容加载进物理内存;

    如果涉及多个进程依赖同一个动态库,操作系统将会让这些进程共享内存中的同一份动态库以节省内存;

    具体的方法是在当前被管理的动态库中寻找新进程所依赖的动态库是否已经在当前物理内存中留有副本,若是有则直接进行链接从而减少I/O次数;

    当动态库被加载进内存时同样需要被页表进行映射以保证其安全性;

    一般情况下动态库将会被映射至每个依赖该动态库的进程地址空间中用户空间的共享区当中;

    若是某个进程需要对其中的内容进行写入操作时将发生写时拷贝,将会为这个进程单独拷贝一份私有的内容为这个进程服务;

  • 进程的运行

    加载器对动态库进行重定位处理,解析程序对动态库中符号的引用以确保这些引用指向正确的内存地址;

    当所有依赖的动态库被加载完成后,操作系统将开始执行进程的代码,进程也将进入运行状态;

  • 进程的管理

    操作系统将通过task_struct管理进程的执行,根据调度策略在不同进程间切换以确保系统资源的合理分配使用;


动态库的管理

请添加图片描述

操作系统通过间接的方式了解当前系统中所有已经被加载的库与未被加载的库;

动态库的管理同样是采用 “先描述后组织” 的方式进行;

在操作系统中存在一个结构体为link_map;

这个结构体用来表示每个加载的动态库(共享库);

其结构体可能包含库的内存地址,库的名称,指向库的动态段的指针等;

struct link_map {/* 库的加载地址 */ElfW(Addr) l_addr;/* 库的路径名 */char* l_name;/* 指向库的动态段(.dynamic节)的指针 */ElfW(Dyn)* l_ld;/* 链表中的下一个和上一个link_map结构的指针 */struct link_map *l_next, *l_prev;
};

总结

请添加图片描述

动态库和静态库是软件开发中两种主要的代码库链接方式;

其中动态库在程序运行时被加载并允许代码在物理内存中只有一份拷贝而被多个进程共享从而减少系统资源的消耗;

相比之下,静态库在程序编译时被整合进可执行文件;

导致每个程序都包含了一份库的副本,增加了程序的大小和内存占用;

动态库的管理依赖于操作系统中的结构体,如link_map;

它记录了库的加载地址,名称等信息,确保动态链接和库间依赖关系的正确处理;

通过高效地管理和加载动态库,系统能够提高内存使用效率,简化库的更新过程,并支持跨进程的库共享;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FlashDB的TS数据库的标准ANSI C移植验证

本文目录 1、引言2、环境准备3、修改驱动4、验证 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在当今数据驱动的时代,高效可靠的数据存储与管理对于嵌入式系统及物联网(IoT)应用至关重…

Matlab数学建模实战应用:案例2 - 传染病传播

目录 前言 一、问题分析 二、模型建立 三、Matlab代码实现 四、模型验证 灵敏度分析 五、模型应用 实例总结 总结 前言 传染病传播模型是公共卫生和流行病学的重要研究内容,通过数学建模可以帮助我们理解传染病的传播规律和趋势,以便制定有效的…

商超智能守护:AI监控技术在零售安全中的应用

结合思通数科大模型的图像处理、图像识别、目标检测和知识图谱技术,以下是详细的商超合规监测应用场景描述: 1. 员工仪容仪表监测: 利用图像识别技术,系统可以自动检测员工是否按照规范整理妆容、穿着工作服,以及是否…

[Linux] 系统管理

全局配置文件 用户个性化配置 配置文件的种类 alias命令和unalias命令 进程管理 进程表

数电逻辑门电路分析和Digital仿真

文章目录 1. 逻辑门电路 2. 非门(NOT Gate) 3. 与门(AND Gate) 4. 或门(OR Gate) 5. 与非门(NAND Gate) 6. 或非门(NOR Gate) 7. 异或门(XO…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中,接口(interface)是一种引用类型,它定义了一组方法、属性、事件或索引器,但不提供实现。接口只定义成员的签名,而具体的实现由实现接口的类或结构体提供。接口使用关键字…

【每日刷题】Day70

【每日刷题】Day70 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 922. 按奇偶排序数组 II - 力扣(LeetCode) 2. 905. 按奇偶排序数组 - 力扣&…

2024年【N1叉车司机】作业考试题库及N1叉车司机实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 2024年N1叉车司机作业考试题库为正在备考N1叉车司机操作证的学员准备的理论考试专题,每个月更新的N1叉车司机实操考试视频祝您顺利通过N1叉车司机考试。 1、【多选题】《中华人民共和国特种设备安全法》第…

Java基础学习-方法

目录 方法基础概念 方法的格式: 案例:最简单方法的定义 案例:带参数的方法调用 案例:求圆的面积 带有返回值的方法: 方法注意点 方法的重载: ​编辑 案例:数组的遍历: 案例…

基于DE2-115平台的VGA显示实验

一.任务需求 深入了解VGA协议,理解不同显示模式下的VGA控制时序参数(行频、场频、水平/垂直同步时钟周期、显示后沿/前沿等概念和计算方式);通过Verilog编程,在至少2种显示模式下(64048060Hz,102476875Hz&…

c++模板模式

文章目录 模板模式什么是模板模式为什么使用模板模式模板模式实现步骤 示例模板模式优缺点 模板模式 什么是模板模式 模板模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将某些步骤的具体实现延…

SEO之预估流量及价值(二)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 (接上一篇。。。。) 2、点击率 搜索结果页面各排名位置点击率也不精确。前面介绍的…

当游戏遭遇安全问题,我们应该怎么做?

在游戏安全领域,专业性最差、但最常见的案例类型是DDoS攻击(分布式拒绝服务攻击)。出于它的特性,中小厂商、独立开发者较容易遭受这类攻击。 例如,今年2月29日上线的手游《雷索纳斯》就遭受了名为ACCN组织发起的DDoS攻…

「Python-docx 专栏」docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

曲线拟合 | 二次B样条拟合曲线

B 样条曲线拟合实例&#xff1a;能平滑化曲线 1. 实例1 为MASS包中mcycle数据集。它测试了一系列模拟的交通车事故中&#xff0c;头部的加速度&#xff0c;以此来评估头盔的性能。times为撞击时间(ms)&#xff0c;accel为加速度&#xff08;g&#xff09;。首先导入数据&#…

客观评价,可道云teamOS搭建的企业网盘,如Windows本地电脑一般的使用体验真的蛮不错

不管是企业网盘还是私有网盘&#xff0c;简单易用一直是我比较在意的。快速能上手使用&#xff0c;甚至不需要习惯一套新的操作逻辑&#xff0c;代表着不需要学习适应&#xff0c;能够迅速投入正常使用。 在这个过程中&#xff0c;可道云teamos以其Windows电脑般的流畅体验&am…

S级猫主食冻干测评出来了:希喂、K9、朗诺实测分享

对于许多宠物主人来说&#xff0c;一到挑选主食冻干就头疼。尽管主食冻干为猫咪带来的益处远超过普通猫粮&#xff0c;但其价格也相对较高。因此&#xff0c;许多宠物主人担心高价购买的主食冻干营养价值并不高。实际上&#xff0c;除了营养&#xff0c;安全性和配方也是选购时…

无线麦克风推荐哪些品牌,热门领夹无线麦克风哪个好,看本期文章

​在信息爆炸的今天&#xff0c;高品质的无线领夹麦克风能让声音更清晰响亮。技术发展带来多样化选择同时也带来选择困难。根据多年使用经验和行业反馈&#xff0c;我推荐一系列可靠、易用且性价比高的无线领夹麦克风&#xff0c;助你作出明智选择。还要不知道该怎么选无线领夹…

VSCode 安装NeoVim扩展(详细)

目录 1、安装NeoVim扩展 2、windows安装Neovim软件 3、优化操作相关的配置&#xff1a; 5、Neovim最好的兼容性配置 6、技巧和特点 6.1 故障排除 6.2、Neovim 插件组合键设置 6.3、跳转列表 1、安装NeoVim扩展 在扩展商店搜索NeoVim&#xff0c;安装扩展 2、windows安装…

律所优选管理软件排名:Alpha法律智能操作系统领先行业

面对庞大复杂的管理体量&#xff0c;律所一体化建设面临的首要问题便是信息化系统的建设与应用&#xff0c;即统一管理平台的问题。Alpha法律智能操作系统集法律大数据、律所管理、人工智能于一体&#xff0c;从业务、人员、信息三个板块最大限度支持律所数字化建设&#xff0c…