动态、静态链接库的使用和讲解

目录

一、静态库

静态库链接案例

二、动态库

动态库链接案例

 三、两者的对比

大家有没有想过为什么要用链接库?

其实使用链接库是为了你所在的公司以及你个人的方便,比如:实现资源共享、便于维护和升级、比较安全

一、静态库

1、静态库的命名格式

lib + 库的名字 + .a

例:libMyTest.a (MyTest为静态库的名字)

2、静态库作用分析在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,生成的静态库要和头文件同时发布。

优点:寻址方便,速度快

           库在链接时被打包到可执行文件中,直接发布可执行程序即可以使用

缺点:静态库的代码被加载到可执行程序中,因此体积过大

           如果静态库的函数发生改变,必须重新编译可执行程序

静态库链接案例

(此案例较简单,大家主要参考其中的步骤和流程)

1、先建立一个add.c,作用是求出两个数的和

 2、建立add.h

3、建立main.c

接下来就是比较重要的编译和链接静态库的方法和步骤:

 

 ar这个工具来编译静态库,cr标志告诉ar将object文件封装;

“-L .”指明了当前lib所在的路径是在本目录,-l表示链接libsum.a这个lib库,很好理解;

运行结果:

sa 

二、动态库

动态库(共享库)

1、动态库的命名格式

 lib + 库的名字 + .so

例:libMyTest.so (MyTest为动态库的名字)

2、动态库作用分析

共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

优点:节省内存

            易于更新,不用重新编译可执行程序,运行时自动加载

缺点:延时绑定,速度略慢

动态库链接案例

(此案例较简单,大家主要参考其中的步骤和流程)

1、先建立一个add.c,作用是求出两个数的和

 2、建立add.h

3、建立main.c

  

接下来就是比较重要的编译和链接动态库的方法和步骤:

 

 动态库文件的后缀名就是.so

先将我们的函数编译成动态库,然后在编译main.c时要链接我们的动态库;

运行结果:

 三、两者的对比

1、静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。

2、静态库在编译时会直接整合到目标程序中,编译成功的可执行文件可独立运行;动态库在编译时不会放到连接的目标程序中,即可执行文件无法单独运行。

静态库和动态库最本质的区别就是:该库是否被编译进目标(程序)内部。

3、静态库
优点:

①静态库被打包到应用程序中加载速度快
②发布程序无需提供静态库,移植方便

缺点:

①相同的库文件数据可能在内存中被加载多份,消耗系统资源,浪费内存
②库文件更新需要重新编译项目文件,生成新的可执行程序,浪费时间。

4、动态库
优点:

①可实现不同进程间的资源共享
②动态库升级简单,只需要替换库文件,无需重新编译应用程序
③可以控制何时加载动态库,不调用库函数动态库不会被加载                                                       

缺点:

①加载速度比静态库慢
②发布程序需要提供依赖的动态库

创作不易,大侠请留步… 动起可爱的双手,来个赞再走呗 <( ̄︶ ̄)>

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小气鬼944

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值