先来看个例子:
先写一下实现加减功能的子函数。主函数要调用另一个c文件里面的函数,一般是通过共同包含同一个.h文件实现的。
// filename add_minus.h
#ifndef __ADD_MINUS_H__
#define __ADD_MINUS_H__
int add(int a, int b);
int minus(int a, int b);
#endif /*__ADD_MINUS_H__*/
我们的功能函数add_minus.c:
// filename add_minus.c
#include"add_minus.h"
int add(int a, int b)
{
return a+b;
}
int minus(int a, int b)
{
return a-b;
}
gcc -c add_minus.c
编译生成 add_minus.o
ar rc libadd_minus.a add_minus.o
生成静态库
主函数:
#include<stdio.h>
#include"add_minus.h"
int main()
{
printf("hello\n");
printf("%d\n",add(1,2));
printf("%d\n",minus(1,2));
return 0;
}
gcc -c main.c
生成main.o
链接静态库
上节的1~3已经得到了libadd_minus.a和main.o文件,这一步需要把这两个文件链接起来
gcc -o main2 main.o -L./ -ladd_minus
说明1:-L./表明库文件位置在当前文件夹
说明2: -ladd_minus 表示链接 libadd_minus.a 文件,使用“-l”参数时,前缀“lib”和后缀“.a”是需要省略的。
如果我们在链接的时候提示“未定义的引用”从两方面考虑定位:
1、是否链接成功
2、利用grep "add" libadd_minus.a 来查看静态库中是否有这个接口函数
参考了文档:
链接:https://www.jianshu.com/p/5ee9d6f93522