01 / 什么是库
- 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类
- 库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
- 库文件有两种,静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制倒了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
- 库的好处:1、代码保密 2、方便部署和分发
02 / 静态库制作
-
命名规则:
Linux:libxxx.a
lib:前缀(固定)
xxx:库的名字,自己起
.a:后缀(固定)
Windows:libxxx.lib
-
静态库的制作:
gcc 获得的 .o 文件
将 .o 文件打包,使用 ar 工具(archive)
ar rcs libxxx.a xxx.o xxx.o
r - 将文件插入备存文件中
c - 建立备存文件
s - 索引
创建文件夹lesson04,创建子文件夹calc和library文件夹
在calc下新建add.c,div.c,mult.c,head.h,main.c,sub.c
add.c
#include <stdio.h>
#include "head.h"
int add(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;
}
mult.c
#include <stdio.h>
#include "head.h"
int multiply(int a,int b){
return a*b;
}
sub.c
#include <stdio.h>
#include "head.h"
int subtract(int a,int b){
return a-b;
}
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;
}
在XShell中安装tree,sudo apt install tree,可以用tree来查看当前路径下的文件
gcc -c add.c div.c mult.c sub.c,生成add.o div.o mult.o sub.o
ar rcs libcalc.a add.o sub.o mult.o div.o,生成libcalc.a