目录
库文件
库文件是预先编译好的方法的集合。
比如:我们提前写好一些数据公式的实现,将其打包成库文件,以后使用只需要库文件就可以,而不需要重新编写。库文件分为:静态库和动态库(也叫共享库)两种。
windows 系统静态库扩展名为:.lib 动态库扩展名为:.DLL;
Linux 系统静态库扩展名为:.a 动态库扩展名为: .so
静态库
1、特点:
程序在链接的过程当中,链接器从库文件中取得所需代码,复制到生成的可执行文件当中。因此,静态库是在程序的链接阶段被复制到程序当中,和程序的执行过程没有关系。
2、静态库的生成
eg:有两个源文件:main.c max.c
1) gcc –c main.c max.c (得到 main.o 和 max.o)
2) 使用 ar 将目标文件归档
ar crv libxxx.a main.o max.o
**libxxx.a 即为我们创建的静态库。
动态库(共享库)
1、特点:
动态库在链接阶段并没有被加载到程序当中,而程序在运行时被系统动态加载到内存当中供程序使用。
2、共享库的生成
1)将所有的.c文件编译成.o目标文件
gcc –c max.c
gcc –c add.c
2)对生成的.o文件处理生成共享库,假设共享库的名字为libfoo.so
gcc –fPIC –shared –o libxx.so add.c
静态库和共享库的区别
1、静态库是在程序编译时链接的;动态库是在程序运行时链接的
2、静态库的可执行文件当中包含了库代码的一份完整的拷贝,因此,当它被多次使用时就会有多份没用的拷贝在内存当中,所以比较占内存;而动态库系统只需载入一次动态库,不同的程序可以得到内存当中相同的动态库的副本,因此会节省很多内存。