一、简介
1、静态库
静态库可以认为是一些目标代码的,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分。
静态库文件名命名规则:libxxx.a
- lib: 前缀
- xxx: 文件
- a : 后缀
1、动态库
动态库在程序运行阶段才进行加载,库文件没有被直接加载到可执行程序当中 动态库文件名命名规则:libxxx.so
- lib: 前缀
- xxx: 文件
- so : 后缀
二、静态库和动态库优缺点
| 库 | 优点 | 缺点 |
|---|---|---|
| 静态库 | 静态库直接打包到程序中执行效率高 | 占用内存 |
| 动态库 | 可实现进程间资源共享 | 执行效率低 |
三、静态库的建立
graph LR
c文件等-->预处理
预处理-->编译
编译-->汇编
汇编-->.o目标文件
.o目标文件--ar创建库文件-->.a库文件
1、生成.o文件
gcc -c abc.c
2、生成库文件
ar rcs libmy.a abc.o
- r : 将文件插入库文件中
- c : 建立库文件
- s : 对库进行“排序”
三、动态库的建立
生成.o文件时,静态库是-c选项,而动态库是-fPIC, 因为动态库需要生成与位置无关的代码,动态库在运行是是被动态加载到内存中的位置
graph LR
c文件等-->预处理
预处理-->编译
编译-->汇编
汇编-->.o目标文件
.o目标文件--gcc -shared-->.a库文件
1、生成.o文件
gcc abc.c -o abc.o -c -fPIC
2、生成库文件
gcc -shared -o abc.so abc.o