linux编译静态库

#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好在这个目录寻找

2. “-L.”也表示当前文件目录,但这个是指明自定义库的路径(libmylib.a)

3. “-lmylib”这个“-l”是链接库,注意,这里是“mylib”,没有开头的“lib”和文件类型".a" 

发布了13 篇原创文章 · 获赞 0 · 访问量 388

猜你喜欢

转载自blog.csdn.net/tjw316248269/article/details/104430948