在编译程序的链接阶段,会将源码汇编生成的目标文件.o与引用到的库(包括静态库)的二进制文件一起链接打包到最终的可执行文件中。
静态库常以.a
或.lib
为后缀。
静态库命名规范:lib[name].a
,其中lib
是静态库前缀,中间[name]
为静态库名称,最后.a
为静态库后缀。例如:libaddfunc.a
,其中addfunc
才是静态库的名称。
1. 创建静态库
在使用创建静态库前,为了使得工程目录更加清晰,我们创建三个文件夹lib(存放.h文件)、src(存放.c文件)、debug(存放.o文件)
(1)编写库文件。
fun1.c
#include "stdio.h"
int add(int a, int b)
{
return a+b;
}
fun1.h
#include "stdio.h"
int add(int a, int b);
将编写好的库文件存放到不同的文件夹里。
(2)将库文件编译为目标文件(.o)
使用命令:gcc -c ./src/fun1.c -o ./debug/fun1.o
,在debug目录下生成fun1.o
目标文件。
(3)创建封装静态库
使用ar工具,并添加命令 rcs,将debug文件夹里的所有的.o文件进行封装为静态库libaddfunc.a
。
如:ar rcs libaddfunc.a ./debug/*.o
。此时libaddfunc.a
就是静态库。其中addfunc
是静态库的名称。
2. 静态库的使用
(1)编写main.c源码文件
main.c
#include "fun1.h"
#include "stdio.h"
int main()
{
int a=8;
int b=10;
int sum=0;
sum=add(a,b);
printf("%d\n"sum);
}
(2)编译源码时链接静态库,生成可执行文件。
命令:gcc main.c -o main -I ./lib -L ./ -l addfunc
-I ./lib
:表示头文件所在的路径。
-L ./
:表示静态库所在的路径,此处为当前路径。
-l addfunc
:表示要连接的静态库名称,addfunc为静态库名称。
(3)运行可执行文件。