1.什么是库
库是写好的现有的,成熟的,可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个⼈的代码都从零开始,因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式,可以被操作系统载⼊内存执⾏。库有两种:
- 静态库 .a[Linux]、.lib[windows]
- 动态库 .so[Linux]、.dll[windows]
2.手动制作静态库
如果我们要做一个静态库的话,首先我们需要把我们源文件(.c/.cpp)隐藏起来,头文件(.h)必须暴露出来,1.我们先要把我们所有的.c文件编译成.o文件,因为我们都知道我们正常进行程序翻译的时候,首先要做的工作就是把.c变成.o文件,最后把所有.o都链接起来。
2.把所以.o文件打包指令:ar -rcar是 Unix 和类 Unix 系统下用于创建、修改和提取归档文件的工具,ar -rc是ar命令的一个常用选项组合,其功能如下:
- -r(replace):该选项用于将文件替换或插入到归档文件中。如果归档文件中已存在同名文件,-r选项会用新文件替换旧文件;如果归档文件中不存在同名文件,则将新文件插入到归档文件中。
- -c(create):用于创建一个新的归档文件。若指定的归档文件已存在,-c选项不会报错,而是静默处理,使得ar -rc能够在归档文件不存在时创建新的归档文件,存在时进行更新操作。
语法:ar [选项] 归档文件 目标文件...
- 归档文件:指定要创建或修改的归档文件的名称,通常具有.a扩展名,如libexample.a。
- 目标文件:指定要添加到归档文件中的一个或多个源文件的名称,可以是 C、C++ 源文件,也可以是目标文件(.o文件)等。
- 静态库必须有前缀lib,后缀.a。
这个库制作好了,直接把他安装到系统里面:把我们头文件拷贝到系统特定路径里,Linux系统里默认搜索头文件路径是/usr/include![]()
然后把我们库也要安装到系统里,默认路径一般是/lib64/![]()
这样静态库和头文件都被安装到系统中去了,所以Linux系统中,所有的安装本质就是拷贝。
3.手动调用我们自己的静态库
然后试试别人能不能直接使用头文件中的方法:创建一个other目录:![]()
![]()
#include<my_stdio.h> #include<my_string.h> #include<stdio.h> int main() { const char *a = "abcdf"; printf("%s: %d\n",a,my_str