动静态库详解
认识动静态库
一. 动静态库的基本原理
首先我们先了解一下一个代码转换成程序需要的步骤都有哪些:
- 预处理: 将代码转换成test.i代码 ,还是c语言代码
- 编译: 将test.i转换成汇编语言代码,test.s
- 汇编: 将test.s转换成可重定向的二进制文件(目标文件),test.o
- 链接: 将这些二进制文件链接起来转换成真正意义上的可执行文件。
那么库是怎么形成的呢??
当我们将代码从test.c变为test.o的时候,我们将这些.o文件集合起来,所以可以库的本质就是一堆.o文件的集合,注意这里不包括main函数,但是包含大量的方法。
二. 认识动静态库
-
ldd命令
该命令可以查看一个可执行程序应用的库文件,如下图:
-
库的命名
在linux中以.so结尾的叫做动态库,以.a结尾的叫做静态库,而在windows中以.dll结尾的为动态库,以.lib结尾的为静态库。并且当我们查看库的名字的时候需要先去掉前缀lib和后缀.so或者.a,剩下的内容才是库的名字,比如上图中我们看到的libc.so这个库,我们现在看感觉很陌生,但是我们按照上面的方式去掉lib和后面的.so后发现就剩下一个c,那么这不就是我们的c语言库吗。
动静态库各自的特征
一. 静态库(.a后缀): 程序在编译链接的时候把库