动态与静态函数库的的使用 和 区别 及 优缺点

初识静态库与动态库

静态函数库与动态函数库的使用中,有人也把他称为程序的静态链接及动态链接
静态链接:指程序链接时使用静态库的链接方式,把所有需要的库函数加入(拷贝)到了可执行程序当中。

动态链接:指程序链接时使用动态库的链接方式,在编译链接时,只把所需库函数的指针保存在了可执行程序中,在运行时再通过指针找到所需库函数。

静态函数库:程序在链接时,已经把所有所有需的库函数加入(拷贝)到了可执行程序当中,由于加入了库函数所以生成的文件会比较大。但优点是运行时不再需要调用外部库函数了。
在这里插入图片描述
动态函数库库:与静态库相反,程序在链接时,只把所需库函数的指针保存在了可执行程序中,在运行时再通过指针找到所需库函数。优点是这样生成的文件比较小,但是使用动态库函数的可执行程序是不能独立运行的,需要依赖外部的动态库
在这里插入图片描述

静态函数库

这类函数库在编译的时候会直接整合到执行程序当中,所以利用静态函数库编译成的文件会比较大一些

如下图同一段代码使用动态函数库编译出来的可执行程序大小为 8384 ,而使用静态函数库编译的可执行程序 大小为 861240
在这里插入图片描述
在不知情的情况下如何查看文件采用何种函数库(链接方式)
命令:file 文件名
作用:查看文件链接方式
操作如下:
在这里插入图片描述

优点:虽然使用静态函数库的可执行程序文件大小比较大,但是这类可执行程序能独立运行,不需要依赖外部函数库。

缺点:虽然执行文件能独立运行,但因为函数库是直接整合到文件中的,所以要升级更改函数库时,整个执行文件必须要重新编译才能将新版的函数库整合到程序中,这就比较消耗时间。

动态函数库

程序如果使用动态函数库(动态链接),在程序中只保存了函数库中的函数指针而已。也就是说,动态函数库的内容并没有被整合到可执行文件中,而是当程序要使用函数库相关函数时,程序才会通过函数指针找到该函数并使用。 所以由于可执行程序只保存了函数库中函数的指针,并不包含内容,所以他所形成的文件会小很多。

优点 :虽然这类程序不能独立运行,然而其文件中的函数指针具有指向性,所以当函数库中的函数升级后,执行文件根本不需要重新编译,因为可执行文件会依然指向升级后的函数。(新旧版本的函数库文件名及函数名需相同)

缺点:程序不能独立运行,程序所依赖的函数库不能随意删除或移动,会影响依赖他的程序。

拓展:目前的Linux发行版比较倾向于使用动态函数库,因为如同上面提到的最重要的一一点,就是函数库的升级方便。由于Linux系统里面的软件依赖性太复杂了,如果使用太多的静态函数库,那么升级某一个函数库时,就会对整个系统造成很大的冲击。因为其他依赖的执行文件也要同时重新编译,这个时候动态函数库可就有用多了,因为只要动态函数库升级就好,其他的软件根本无须变动。

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值