项目文件最终的树目录,生成目标程序后,可以删除中间文件
note:静态库以lib开头 ,比如mylib.a
静态库缺点:很多程序使用一个函数库的函数时,会产生很多个副本。
共享库.so可以解决此问题。
- 创建自己的函数,放在不同的头文件中,只定义不声明,并用gcc编译
//addAnimal.c #include <stdio.h> void addAnimal(char *arg) { printf("add animal: %s\n", arg); } //addFlower.c #include <stdio.h> void addFlower(char *arg) { printf("add flower: %s\n", arg); }
gcc -c addAnimal.c addFlower.c,生成.o文件,用于库文件的归档
-
创建包含所有函数声明的头文件(libmy.h)
//libmy.h void addAnimal(char *); void addFlower(char *);
用于项目的调用,包含此头文件即可使用其中的函数
-
利用ar命令归档
ar crv lib.a addAnimal.o addFlower.o -
编译目标程序并链接头文件和库目录
//createMyWorld.c #include <stdlib.h> #include <stdio.h> #include "libmy.h" int main() { printf("start build my world:\n"); addAnimal("pig"); addFlower("rose"); exit(0); }
gcc createMyWorld.c -o createMyWorld -I./mylib/ -L./mylib -lmy
note:-I加入非标准头文件路径,-L加入非标准库目录, -lmy利用-l命令搜索libmy静态库,注意一定不能使用libmy.a会提示找不到