1. 准备工作
# 目录结构 add.c div.c mult.c sub.c -> 算法的源文件, 函数声明在头文件 head.h
# main.c中是对接口的测试程序, 制作库的时候不需要将 main.c 算进去
.
├── add.c
├── div.c
├── include
│ └── head.h
├── main.c
├── mult.c
└── sub.c
add.c
#include <stdio.h>
#include "head.h"int add(int a, int b)
{return a+b;
}
sub.c
#include <stdio.h>
#include "head.h"int subtract(int a, int b)
{return a-b;
}
mult.c
#include <stdio.h>
#include "head.h"int multiply(int a, int b)
{return a*b;
}
div.c
#include <stdio.h>
#include "head.h"double divide(int a, int b)
{return (double)a/b;
}
head.h
#ifndef _HEAD_H
#define _HEAD_H
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法
double divide(int a, int b);
#endif
main.c
#include <stdio.h>
#include "head.h"int main()
{int a = 20;int b = 12;printf("a = %d, b = %d\n", a, b);printf("a + b = %d\n", add(a, b));printf("a - b = %d\n", subtract(a, b));printf("a * b = %d\n", multiply(a, b));printf("a / b = %f\n", divide(a, b));return 0;
}
2. 生成静态库
第一步,将源文件add.c, div.c, mult.c, sub.c 进行汇编,得到二进制目标文件add.o, div.o, mult.o, sub.o (注意用-I指定头文件路径)
gcc add.c div.c mult.c sub.c -c -I ./include/
第二步,使用ar工具将生成的目标文件 .o 打包成静态库 (a.o b.o c.o在同一个目录可以写成*.o)
ar rcs libcalc.a a.o b.o c.o
第三步,将生成的静态库libcalc.a 和 库文件对应的头文件head.h 一起发布出去
3. 使用静态库
gcc main.c -o app -L ./ -l calc
执行可执行程序。
./app