Linux——动态库和静态库

Linux动态库与静态库 基于著名书籍和自我学习得出的Linux动态库与静态库精华知识 阅读详情

库本质上也是文件,而且库分为两种

1、静态库

libxxxxx.a

2、动态库

libxxxxx.so

这里的库的标准就是前缀libxxxx后缀.a,识别的时候要去掉前缀和后缀,剩下的中间就是库的名字

所以这个库就是c-2.17的库

动态库感性理解

在某某高中的新生小明想要上网,于是问了学长,说是在学校的北门就有小蚂蚁家网吧

小明规划好一天的事,计划中午写完化学作业就去网吧打两小时原神,打完后就回来继续在学校学习, 这里小明就完成了在网吧上网这件事

因为想玩原神

为什么不在宿舍玩原神呢?

因为宿舍没有电脑,只能去网吧玩

回到正题,我们为什么写C语言的时候要调用库呢?

是因为我们没用对应的方法,为什么不自己写一个而是要调用呢,因为我们没有这个能力

当我们规划好我们一天要做的事情后,这个清单就叫做程序,程序里要执行的很多方法就可以自己做, 比如数学作业,化学作业,就像C语言中的for循环,while循环;但是,总有一些需求里的功能我们无法 完成,所以我们就只能跳转到对应的库里面去,而小蚂蚁网吧就相当于动态库。网吧里的机子很多,但是我们只想找一个靠窗能玩原神的机子,就像库里包含的方法很多,我们只要能实现相应功能的方法。 这就叫作调用库函数,2个小时原神打完后我们就该回学校,继续学习计划,就像特定的库函数调用完成 后,程序就继续运行下一个任务。

我们怎么能知道北门这有网吧呢?

是学长告诉的并且我们记住了

这里小明还没有上高中呢,就已经知道了网吧的位置,这个过程我们称之为链接的过程,是谁给小明做 的链接呢?是学长,所以我们就把学长称为链接器,将小明和网吧产生某种关联。

小明把网吧的地址写在了大脑里,程序实际上也是在链接的过程中把相应功能函数的的地址拷贝到可执行程序里,那么这个过程就叫做链接的过程。

这里的小明就相当于一个程序,某某高中就相当于内存,网吧就相当于一个动态库,程序加载到内存当 中,当需要一些功能时就跳转到库里运行,不过库严格意义上来讲也可以加载到内存中去,不过今天暂不考虑。

某一天,有人向学校南门的派出所举报北门的那个黑网吧,之后网吧就被查封了。其实学校里除了小明 还有很大一部分人也去黑网吧,这些人当初也是问的学长,学长给他们建立连接,学校里可能有一大批 的学生就指望着网吧活着,现在黑网吧被取缔了,学校里所有同学就都不能上网了;换言之,这个网吧 就是被所有人共享的

网吧被称为动态库,动态库其实也叫共享库

就像我们的一些指令,使用时都会有链接C语言库的行为

假如我们将系统里C语言的库删掉,这些调用C库都不能运行了

这个就是对动态库的感性认识

静态库的感性理解

三年过去了,小明如愿以偿的考上了大学,让他爸爸给他买一台电脑,他爸爸就去找小蚂蚁网吧的老 板,想买一台网吧里的电脑,小明爸爸就买了一台网吧的电脑,放在了小明的宿舍里。后面小明向上网 了直接就可以在宿舍上网。这里小明爸爸就充当了链接器

他的链接方式非常粗暴,小明想玩原神,他爸爸就直接给他买了一个能玩原神的电脑。就像程序想实现 printf函数的功能,但系统直接所需要将库里所有的代码都拷贝到程序里了

这种方式就叫做静态链接

这样一来,就算学校附近的网吧也被查封了也不会影响到小明玩原神

总结:

1、库分为静态库(专门让编译器,对用户的程序进行静态链接的)和动态库(专门让编译器,对用户的程序进行动态链接的)

2、静态库和静态链接:链接的时候,如果是静态链接,找到静态库,拷贝静态库中我所需要的代码到我自己的可执行程序中

3、动态库和动态链接:链接的时候,如果是动态链接,找到动态库,拷贝动态库中我所需要的代码到我自己的可执行程序中相关的位置

4、静态库链接成功:我们的程序,不依赖任何库,自己就可以独立运行

5、动态链接成功:我们的程序,还是依赖动态库,一旦动态库缺失,我们的程序就无法运行!

6、静态库:因为自身拷贝的问题,比较浪费空间

7、动态库:因为可以做到被大家共享方法,所以真正的实现永远都是在库中,程序内部只有地址,比较节省时间

8、静态库VS动态库:Linux默认使用的是动态链接和动态库!

这里试一下静态链接,但是可以看见静态链接的大小是相当于动态链接的10倍有余

所以才不推荐使用静态链接

一般的云服务器里,都默认只有动态库,我们使用静态链接时可能会报错

这个代码就可以安装C语言静态库

实验室LIMS系统选型指南:从赛默飞到金现代,5大主流方案横评 本文深入分析了实验室LIMS系统选型的5大核心维度,包括架构选择、行业适配性、合规性设计、智能化程度和成本模型。通过对比赛默飞、金现代等主流厂商的优劣势,提供实战避坑策略,帮助实验室管理者做出明智决策,提升运营效率和合规水平。 阅读详情

相关推荐

ESP32C3的I2S接口详解:以驱动PCM5102A为例,避开时序与配置的那些坑

本文深入解析ESP32C3的I2S接口驱动PCM5102A DAC的完整解决方案,涵盖时序对齐、PCB优化和寄存器级配置。通过实际案例分享时钟树分析、信号完整性设计和底层调试技巧,帮助开发者避开常见陷阱,实现高质量音频输出。重点探讨了I2S协议栈、电源滤波优化及DMA传输异常处理等关键技术要点。

weixin_30254435的博客 298

【Linux】静态库和动态库

介绍动静态库、制作动静态库以及使用动静态库,基于地址空间理解动态库加载和程序运行的过程!

YoungMLet的博客 4089

Synopsys安装教程Ubuntu22.04版本

在Ubuntu22版本上安装Synopsys等系列工具,安装DC,VCS等等

qq_59529218的博客 5722

Linux —— 动态库和静态库

详细演示了动静态的库的制作和使用

M的博客 6002

Nginx配置Cookie安全属性:HttpOnly、Secure、SameSite实战指南

Cookie是Web应用中维持用户状态的核心机制,其安全配置直接关系到会话管理与身份认证的可靠性。从原理上讲,HttpOnly属性可防止XSS攻击窃取Cookie,Secure属性确保Cookie仅在HTTPS加密连接中传输,而SameSite属性则用于控制跨站请求时Cookie的发送行为,能有效防御CSRF攻击。这些安全属性的技术价值在于构建纵深防御体系,提升应用的整体安全性。在现代浏览器(如Chrome 80+)默认将未明确声明的Cookie视为SameSite=Lax的背景下,正确配置这些属性变得尤为

weixin_33783283的博客 320

RK3588 InsightFace人脸识别移植及精度测试全解析

本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。

Hi20240217的博客 3662

【Linux】动态库、静态库

动态库与静态库相关内容

weixin_69380220的博客 1665

方法二:旋转机械动平衡精度计算

本文以实际案例为基础,系统阐述基于ISO 1940标准的动平衡精度G GG等级计算方法。通过角速度转换、许用剩余不平衡量e p e r e_{per}e per ​ 推导及G GG等级公式应用,结合惯性力偶矩、转子质量等参数,得出某转子系统的动平衡精度为G 40 G40G40。文中详细解析了公式原理与参数单位转换要点,并附完整ISO 1940动平衡等级参考表,为工程师提供从理论到实践的完整解决方案。研究结果表明,该方法可有效量化旋转机械的平衡精度,适用于风机、泵类等中低速设备的设计与调试,对提升设备运行

weixin_46153372的博客 920

Linux静态库和动态库

​动态链接库是程序运行时加载的库,当动态链接库正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态库,因此在Linux中动态链接库也可称之为共享库。​动态链接库是目标文件的集合目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址使用的是相对地址静态库中使用的是绝对地址),其真实地址是在应用程序加载动态库时形成的。NOTE]静态库跟动态库的核心区别是什么呢?静态库使用绝对地址,动态库使用相对地址?关于动态库的命名规则在Linux中,动态库以lib作为前缀,以.so。

踏上取经路,比抵达灵山更重要🐱‍👤 1453

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 972

Unity 编辑器篇|(一)MenuItem菜单栏

"一级菜单/二级菜单上/三级菜单""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""GameObject/二级菜单""CONTEXT/组件名/菜单名""一级菜单/二级菜单上 #_A""Assets/二级菜单""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""自定义/Test"

游戏开发小Y的博客 13万+

Linux静态库和动态库的实现

作者简介:大家好我是小唐同学(๑>؂

&volume的博客 2079

深信服全产品线新版图标库 Visio版+PPT版【2023年最新整理】

深信服全产品线新版图标库Visio版(含网络位置符号以及其他网络设备和外设图标)有朋友想要我整理一下深信服的相关图标,那么今天,瑞哥给老铁们整理了。运维漫谈是瑞哥针对运维领域的一个公众号,欢迎大家的关注哦!篇幅原因,就只展示那么多,有需要的朋友自行下载。SANGFOR 各产品图标-Visio版。你好,这里是网络技术联盟站。SANGFOR全产品线图标。深信服设备前置面板-AC。

网络技术联盟站 3692

Linux静态库和动态库区别

<br /><br />  我们通常把一些公用函数制作成函数库,供其它程序使用。<br /> <br />  函数库分为静态库和动态库两种。<br /> <br />  静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。<br /> <br />  动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。<br /> <br />  本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。<br /> <br />  在创

zjjyliuweijie的专栏 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux之动态库和静态库

本文介绍了如何自定义动态库、静态库以及如何使用自定义的动态库和静态库。

一只小卷毛的博客 2933

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux: 静态库和动态库

在Linux环境下,我们使用gcc编译链接代码时,可以分为静态链接和动态链接。静态链接即在编译链接时,将代码所使用到的静态库文件代码全部拷贝到可执行文件中(拷贝实质上是将库文件的代码展开拷贝至我们的可执行程序的代码段。,这样做的缺点是可执行文件会生成的比较大,优点是此时再运行可执行文件就不需要再查找库了。静态库文件一般以.a 结尾动态链接不会在编译时将动态库文件的代码加入到可执行文件中,而是在可执行文件运行时,去查找所需的动态库,并将其加载到相应的进程中,并且不同的进程可以共享这些动态库。

2301_79927432的博客 1465

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux系统中的静态库和动态库

Linux系统中的静态库和动态库

2403_82436914的博客 1040

Linux 静态库和动态库

在实际开发中,我们把通用的函数和类分文件编写,称之为库。在其它的程序中,可以使用库中的函数和类。一般来说,通用的函数和类不提供源代码文件(安全性、商业机密),而是编译成二进制文件。库的二进制文件有两种:静态库和动态库。

qq_41885018的博客 1438

Linux动态库和静态库

做库时,头文件(.h)必须暴露,源文件(.c)必须隐藏。操作:将需要形成库的文件编译成.o文件:这时候就可以把头文件和库文件交给另外一个人使用。

pouop的博客 1360

【Linux】Linux静态库和动态库基础

静态库与动态库的概念及使用流程 静态库在编译阶段嵌入可执行文件,生成独立程序,文件后缀为.a。优点包括独立性强、启动速度快,缺点是体积大且更新麻烦。动态库则在运行时加载,后缀为.so,具有体积小、更新方便的优点,但依赖环境且启动稍慢。 静态库制作流程:1) 编译源文件为.o;2) 用ar工具打包为.a文件;3) 发布库文件和头文件。使用时需指定头文件路径(-I)和库路径(-L)。动态库制作类似,但需-fPIC编译,使用ldconfig或环境变量配置路径。 关键区别: 静态库:编译时链接,独立性强 动态库:运

Antonio915的博客 1535

【Linux】动态库和静态库

我们平时写的C程序,一上来就写上,然后就可以使用诸如printfscanf等函数,可在stdio.h中只包含函数的声明而不包括函数的定义(实现),那么函数的定义在哪里呢?答案是在库文件中。库是一组已经编写好的代码或程序模块,通常包含了函数的实现,使用库可以帮助程序员节省时间和精力,使得程序员不需要花费精力造轮子,提高了代码的可维护性和可重用性。而库又分为动态库和静态库动态库(共享库):在程序运行时通过加载器被加载到物理内存中,使得多个程序可以同时共享同一份库的实例。。在Linux中,.so。

Weraphael的博客 1380
上一篇: Linux——编译器-gcc/g++
下一篇: Linux——自动化工具
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值