静态库和动态库

什么是库?

库通俗的讲就是把一些常用的函数的目标文件打包在一起,提供相应的接口,便于程序员使用。库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。像我们中常用的输出printf函数。当我们在使用时并不关心其底层是如何实现,只是使用其来提高编写代码的效率。

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

当我们写一段代码,要将其编译成可执行程序时,要经历一下步骤:
静态库和动态库_第1张图片

静态库

在链接阶段,将汇编生成的目标文件.O与引用到的库一起链接打包到可执行文件,这个过程对应的连接方式就是静态链接
静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。
静态库特点总结:

  1. 静态库对函数库的链接是放在编译时期完成的。
  2. 程序在运行时与函数库没有关系。
  3. 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

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

动态库

你可能感兴趣的:(c++,c语言)