Linux静态库和动态库

153 阅读1分钟

一、简介

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