1. 静态库
1.1 静态库的概念特点与静态链接
静态库是一个包含多个已编译目标文件的归档文件,通常用于代码复用
在不同系统中有不同的格式和扩展名:
- Linux/Unix: .a 文件(Archive,由 ar 命令创建)
- Windows: .lib 文件(Library)
- macOS: .a 或 .framework(框架包含静态库)
静态库的特点
- 编译时链接:库代码在程序编译时被直接复制到最终的可执行文件中
- 独立运行:生成的可执行文件不依赖外部库文件
- 体积较大:相同库代码在每个使用它的程序中都有副本
- 部署简单:只需分发可执行文件,不需要在系统上安装额外的库文件
- 更新困难:库更新需要重新编译链接所有使用它的程序
- 加载快,但占用更多磁盘/内存
静态库命名约定(去掉前后缀) 格式:lib<名称>.a 示例:libmath.a、libutils.a 链接时使用:-lmath 会自动查找 libmath.a
静态链接发生在编译的最后阶段,主要步骤:
源代码 → 编译 → 目标文件 (.o) + 静态库 (.a) → 链接器 → 可执行文件
1.2 静态库的创建与使用
创建静态库
# 1. 编译源文件为目标文件
gcc -c file1.c file2.c -o file1.o file2.o
# 2. 打包成静态库
ar rcs libmylib.a file1.o file2.o
编译不链接,生成目标文件:gcc -c 只编译源文件为独立的可重定位目标文件(.o),不进行链接操作 打包加索引,创建静态库:ar rcs 将多个目标文件打包成归档文件(.a)并建立符号索引,供链接器快速查找。
ar
ar(archive)是 Unix/Linux 系统上的归档管理工具,主要用于创建、修改和提取静态库文件(.a 文件) ar 有以下核心功能 创建静态库:将多个目标文件(.o)打包成单个归档文件 维护库内容:可添加、删除、替换库中的目标文件 提取文件:从库中提取单个或多个目标文件
ar [选项] <库文件名> <目标文件列表>
常用参数说明
| 参数 | 全称 | 作用 |
|---|---|---|
r | replace | 插入文件到归档(替换已存在的) |
c | create | 创建新归档(如不存在) |
s | write index | 创建/更新符号表索引 |
t | table/list | 列出归档内容 |

