静态库调用在外部文件中定义的函数:即在静态库中声明并调用函数,但是在外部文件中实现该函数。
在编译成静态库时,源文件中可以只提供函数声明,具体的实现交给调用该静态库的人去做。
假设有a.c和b.c,a.c中声明并调用了fun1(),但是在b.c中实现fun1()。
a.c
#include <stdio.h>
extern void fun1(void);
int a_tmp;
void fun2(void){
fun1();
printf("a_tmp=%d\n",a_tmp );
}
--------------------------------------------------
b.c
#include <stdio.h>
extern void fun2(void);
extern int a_tmp;
void fun1(void){
printf("fun1.\n");
}
void main(void){
a_tmp = 10;
printf("hello b.c.\n");
fun2();
}
1. 将a.c编译成静态库
1)先编译成目标文件:gcc -c a.c -o a.o
2)打包成静态库:ar cr liba.a a.o
2. 编译b.c并运行
1)编译:gcc -o ab b.c -L. -la
2)运行:./ab
结果如下: