#include <stdio.h> //num.c
int add_num(int a, int b){
return a+b;
}
int sub_num(int a, int b){
return a-b;
}
#include <stdio.h> //print.c
int print_num(int n){
printf("result is %d\n", n);
return 0;
}
#include <stdio.h> //hw.c
#include <my_lib.h>
int main(){
int ret=0;
int a=8,b=5;
ret=add_num(a,b);
print_num(ret);
ret=sub_num(a,b);
print_num(ret);
return 0;
}
#ifndef __MY_LIB_H__
#define __MY_LIB_H__
int add_num(int a, int b);
int sub_num(int a, int b);
int print_num(int n);
#endif
以上就是整个编译的过程,和4个所用到的文件。
首先先将num.c和print.c 编程.o文件,然后将其打包成静态库。注意,这里
ar crv libmylib.a *.o :
1. libmylib.a 这静态库应为libxxx.a 格式,因为后面引用时候需要些 -lxxx。可见第一幅图两个红色圈起的地方。
2. 再解释下 ar crv。ar是打包,crv是命令选项
- c 如果需要生成新的库文件,不要警告
- r 代替库中现有的文件或者插入新的文件
- v 输出详细信息
3. 静态库名称libmylib.a 应写在.o文件之前
第二部,编译hw.c文件成可执行文件test
gcc -o test hw.c -I. -L. -lmylib:
1. "-I."表示当前文件目录,因为hw.c 引用了一个自定义头文件,所以要知名目录,gcc好在这个目录寻找
扫描二维码关注公众号,回复:
9580404 查看本文章
2. “-L.”也表示当前文件目录,但这个是指明自定义库的路径(libmylib.a)
3. “-lmylib”这个“-l”是链接库,注意,这里是“mylib”,没有开头的“lib”和文件类型".a"