引言
继上文,从磁盘理解到文件系统框架搭建,再到软硬链接部分,我们逐渐理解了为什么运行程序需要 ./a.out,以及前面的 . 代表什么。
在文件权限部分,我们见识了最基本的库,知道 Linux 动态库后缀是 .so,静态库是 .a,Windows 动态库是 .dll,静态库是 .lib。且库名需去掉前缀和后缀。
那么,我们是否使用过库呢?当然使用过。在使用 C 或 C++ 时,我们使用的头文件所在的库(如 std 库)肯定用过。库的作用是什么呢?
在 STL 容器里,都有基本函数的接口,比如 vector 的 push_back,我们使用的是对应的接口。具体的实现在哪里呢?
具体实现放在 .cc 文件,经编译器编译成 .o 文件,经过链接合并形成最终的库。
接下来,我们从是什么、为什么、怎么办三个方面讨论静态库和动态库。
静态库
为生成静态库,先模拟实现多个 .c 文件和 .h 文件:

然后在里面写入对应的代码:
#pragma once
int Sub(int x, int y);
#include "sub.h"
int Sub(int x, int y) {
return x - y;
}
#include "add.h"
int Add(int x, int y) {
return x + y;
}
#pragma once
int Add(int x, int y);


