当前位置:网站首页 > 编程语言 > 正文

动态库和静态库的区别是什么(静态库与动态库的区别与优缺点)



库是写好的,成熟的,可以复用的代码,一般程序运行都需要依赖许多底层库文件。

本质上来说库是一种可可执行代码的二进制形式,可以被操作系统载入内存执行,库有两种:静态库(.a、.lib)和动态库(.so、.dll)。

静态、动态是指链接,将一个程序编译成可执行程序步骤如下:

程序编译过程

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

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

  • 优点
    • 程序在运行时与函数库就没有关系,移植方便
  • 缺点
    • 浪费空间和资源,所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件

Linux下静态库命名规则

必须是lib{your_library_name}.a:lib为前缀,中间是静态库名,扩展名为.a

创建静态库(.a)

下面以一个简单四则运算C++类为例,将其编译为静态库给他人用。

头文件

 
  

实现

 
  

Linux通过ar工具,Windows下vs使用lib.exe,将目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索。一般创建静态库的步骤如下:

创建静态库过程
  • 将代码文件编译为目标文件.o(StaticMath.o)

  • 通过ar命令将目标文件打包为.a静态文件

生成静态库libstaticmath.a

使用静态库

  • 编写测试代码
 
  
 
  

为什么需要动态库?

  • 静态库会造成空间浪费,如下图:

  • 静态库对程序更新、部署和发布会带来麻烦,如果静态库更新,则所有使用它的应用程序都需要重新编译、发布给用户(一个小的改动,可能导致整个程序重新下载)。

动态库优点

  • 可以实现进程之间资源共享(因此动态库也称为共享库),如下图:

  • 使程序升级变得简单

Linux下动态库命名规则
命名形式为libxxx.so,前缀是lib,后缀名为“.so”

创建静态库(.so)

类似四则运算代码

头文件

 
  

实现

 
  

与静态库不同,创建动态库不需要打包工具(ar,lib.exe),直接使用编译器即可创建动态库。

  • 生成目标文件,加编译选项-fpic

  • 生成动态库,加编译选项-shared

上面两个命令也可以合并为一个

使用静态库

  • 编写测试代码
 
  

由于动态库是在程序运行时进行链接,所以在程序运行时需要让系统能够找到动态库,系统一般会依次搜索:环境变量LD_LIBRARY_PATH、/etc/ld.so.cache文件列表、/lib、/usr/lib目录找到库文件后将其载入内存。因此主要有三种方法来设置动态库路径。

  • 将动态库绝对路径加入环境变量LD_LIBRARY_PATH
  • 将动态库绝对路径加入/etc/ld.so.cache文件中,步骤如下:
    • 编辑/etc/ld.so.conf文件,加入文件所在目录的路径
    • 运行ldconfig,重建/etc/ld.so.cache
  • 将动态库移到/lib或/usr/lib中
 
  

参考资料

C++静态库与动态库

到此这篇动态库和静态库的区别是什么(静态库与动态库的区别与优缺点)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 单播地址和广播地址的关系(单播地址和广播地址的关系是什么)2025-08-30 18:09:07
  • 如何在win11上安装win7虚拟机(windows11 虚拟机如何安装包含iso文件)2025-08-30 18:09:07
  • 删除虚拟环境后包会一起删除吗(linux删除虚拟环境)2025-08-30 18:09:07
  • 认证码什么意思(认证码是什么东西)2025-08-30 18:09:07
  • 星露谷黄金时钟作用(星露谷物语黄金时钟的范围)2025-08-30 18:09:07
  • polowalk是什么品牌(polowalk是什么品牌怎么读)2025-08-30 18:09:07
  • vs怎么调试程序(vs2010怎么调试程序)2025-08-30 18:09:07
  • jflash下载程序步骤 序列号(jflash怎么烧录程序)2025-08-30 18:09:07
  • ipv6单播地址包括哪两种类型(ipv6单播地址包括哪两种类型的)2025-08-30 18:09:07
  • ddpm模型跟dpm区别(ddm模型 g)2025-08-30 18:09:07
  • 全屏图片