静态库和动态库的区别

什么是库?

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

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

静态库:

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

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

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

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

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

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

为什么还需要动态库?

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

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

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

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

动态库特点总结:

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏栗霖积跬步之旅

git中的merge与rebase

2476
来自专栏Java技术栈

Git 12 岁了,送给你 12 个 Git 使用技巧!

1946
来自专栏有趣的Python和你

Selenium在异步加载中的应用简书文章异步加载Selenium代码代码分析

1335
来自专栏Jerry的SAP技术分享

一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用

这个命令行神器的下载地址:https://stedolan.github.io/jq/#

572
来自专栏Keegan小钢

App架构设计经验谈:接口的设计

App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉。

783
来自专栏喵了个咪的博客空间

[喵咪Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

[喵咪Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定 ? 前言 哈喽大家好啊,好久不见啊(都快一个月了),要问为什么没有更新博客呢只应为...

3898
来自专栏Linux驱动

Linux-ps命令(7)

名称:ps(process status) 使用权限:所有使用者 说明:显示瞬间进程 (process) 的动态 示例: 比如输入ps查看进程,如下图: ? 其...

1676
来自专栏北京马哥教育

10 个迅速提升你 Git 水平的提示

在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用Git提供的功能。 注:本文中,一些命令包含了方括号中的部分内容(例如:git add -p [fi...

2644
来自专栏小白客

Python爬虫学习--爬虫基本架构

一个简单的爬虫架构由爬虫调度端、URL管理器、网页下载器和网页解析器四部分构成。它们之间的关系如下图: ? ● 爬虫调度端:启动爬虫,停止爬虫,监视爬虫的运行情...

3466
来自专栏自由而无用的灵魂的碎碎念

平时优化好你的Oracle,让你的电脑跑顺畅了

你要是做java开发的话,将会遇到一个最常见的问题:自己电脑上安装的Oracle能把你的电脑拖得慢死!(国内做java开发当然最多的是使用oracle咯)。它又...

712

扫码关注云+社区