makefile链接静态库

it2024-12-04  15

先来看个例子:

先写一下实现加减功能的子函数。主函数要调用另一个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  

 

最新回复(0)