静态库和动态库的区别

什么是库?

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。

所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:

静态库:

之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。

试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结:

1、静态库对函数库的链接是放在编译时期完成的。

2、程序在运行时与函数库再无瓜葛,移植方便。

3、浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

通过上面的介绍发现静态库,容易使用和理解,也达到了代码复用的目的,那为什么还需要动态库呢?

为什么还需要动态库?

为什么需要动态库,其实也是静态库的特点导致。

1、空间浪费是静态库的一个问题。

2、另一个问题是静态库对程序的更新、部署和发布页会带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户(对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新)。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新

动态库特点总结:

1、动态库把对一些库函数的链接载入推迟到程序运行的时期。

2、可以实现进程之间的资源共享。(因此动态库也称为共享库)

3、将一些程序升级变得简单。

4、甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

BugkuCTF 域名解析

2397
来自专栏乐享123

Freeze Svn:externals for Tags/branch

3806
来自专栏jouypub

Linux流量复制工具

对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbenc...

1421
来自专栏狂码一生

使用 Nginx 为 Linux 实例绑定多个域名

1893
来自专栏机器学习算法与Python学习

VMware tools详细安装过程

在VMware下安装完Ubuntu的虚拟机后,界面总是很小,使用起来非常的不方便而且不美观,但是该工作对于小白而言有事比较困难的事情(ps:真的挺费劲的),进过...

3006
来自专栏肖洒的博客

【Hexo】bat自动处理hexo命令

每次写新文章都得hexo new “xxx”,写完再hexo g -d,挺麻烦的。 就不能写一个脚本来自动执行吗?

1092
来自专栏腾讯移动品质中心TMQ的专栏

如何轻松爬取网页数据?

在实际工作中,难免会遇到从网页爬取数据信息的需求,如:从微软官网上爬取最新发布的系统版本。很明显这是个网页爬虫的工作。本文将根据网站特性进行分类介绍几种使用py...

3.5K2
来自专栏软件

GitHub快速入门图文全面详解

?tub程序员必须要会 作者:AWeiLoveAndroid 博客:https://www.jianshu.com/u/f408bdadacce 文章目录 入门...

2008
来自专栏云市场·精选汇

如何巧妙解决小程序缓存问题,这5点你都知道吗?

清除缓存是我们开发者经常做的一个操作,我们需要在判断客户端在缺少缓存数据的情况下做出相应的处理

1K4
来自专栏有趣的Python

8- Flask构建弹幕微电影网站-后台页面搭建后台页面搭建

已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mtianyan/movie_proj...

4373

扫码关注云+社区