C语言编译的过程包括的步骤:
预处理:展开头文件/宏替换/去掉注释/条件编译 后缀为.i
编译:检查语法,生成汇编 .s
汇编:汇编转换为机器码 .o
链接: 生成可执行文件.out 或者 exe
静态库生成发生在链接的过程中:
提供静态库比如不想把源代码不暴露给外部,减少运行时的依赖,避免代码重用等。
例子:将加法减法函数封成math库,并且调用。
step1:实现函数,通过写makefile生成库.
add.c和add.h实现
/*add.c function*/
int add(int a,int b)
{
return a + b;
}
/* add.h header*/
int add(int a, int b);
sub函数类似的实现方式。
step2:使用makefile语言 实现lib。
.PHONY:all
all: libmymath.a
libmymath.a: sub.o add.o
ar -rc $@ $^
add.o:add.c
gcc -c add.c
sub.o: sub.c
gcc -c sub.c
.PHONY:output
output:
mkdir -p mylib/lib
mkdir -p mylib/header
cp -f *.h mylib/header
cp -f *.a mylib/lib
.PHONY:clean
clean:
rm -rf *.o
最后生成结果为:
测试生成的库效果:
step1:写测试代码
#include<stdio.h>
#include "pro/mylib/header/add.h"
int main()
{
int a = 2;
int b = 3;
int c = add(a,b);
printf("math output is %d \n",c);
}
step2:编译生成可执行文件
gcc main.c -L pro/mylib/lib/ -l mymath -I pro/mylib/header/ -o main.exe
step3:执行main.exe