静态链接库(.a)文件其实就是将多个object文件(.o)文件打包成一份文件。链接过程可以使用.a或者.o文件。测试一下,三个文件 main.c / fun1.c / fun2.c 分别是:

main.c:

#include "stdio.h"

int fun1(int b);
int fun2(int b);

void main()
{
	printf("%d,%d\r\n",fun1(12),fun2(12));
}

fun1.c:

int fun1(int b)
{
	return b * 2;
}

fun2.c:

int fun2(int b)
{
	return b / 2;
}

将每个源文件单独编译成.o文件,最后一起链接:

【C语言】静态链接库文件(.a)和object文件(.o)区别_C/C

将 fun1.c 和 fun2.c 编译成.o文件,然后使用ar工具打包成静态链接库文件 fun.a ,最后链接 main.o 和 fun.a:

【C语言】静态链接库文件(.a)和object文件(.o)区别_C语言_02

注意链接顺序,fun.a 需要在 main.o 后面才行,因为gcc在链接静态库时是往后找符号,不往前查找,所以写在前面不会被查找到。