静态库是编译时被复制到可执行文件中的归档文件,以 .a(Linux)或 .lib(Windows)格式存在;首先用 g++ -c 编译源文件为 .o 文件,再用 ar rcs 命令打包为静态库,最后在主程序中通过 -I、-L、-l 参数包含头文件路径、库路径并链接库,生成独立可执行文件。

在C++开发中,静态库是一种将多个目标文件打包成一个归档文件的方式,供其他程序在编译时链接使用。它能提高代码复用性、缩短编译时间,并隐藏实现细节。下面介绍如何创建、编译和链接静态库。
什么是静态库
静态库是在程序编译阶段被完整复制到可执行文件中的库。常见格式为 .a(Linux/Unix)或 .lib(Windows)。一旦链接完成,可执行文件不再依赖该库文件。
创建静态库的步骤
假设你有以下两个源文件:
math_util.cpp#include "math_util.h"
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
math_util.h
立即学习“C++免费学习笔记(深入)”;
#ifndef MATH_UTIL_H #define MATH_UTIL_H int add(int a, int b); int multiply(int a, int b); #endif
接下来按以下流程操作:
1. 编译为目标文件
使用 g++ 将源文件编译为对象文件(不进行链接):
g++ -c math_util.cpp -o math_util.o
2. 打包成静态库
使用 ar 工具将目标文件归档为静态库:
ar rcs libmathutil.a math_util.o
这会生成名为 libmathutil.a 的静态库文件。
在项目中链接静态库
现在编写主程序来使用这个库:
main.cpp#include "math_util.h" #includeint main() { std::cout << "3 + 5 = " << add(3, 5) << "\n"; std::cout << "3 * 5 = " << multiply(3, 5) << "\n"; return 0; }
编译并链接静态库
确保头文件和库文件路径正确,然后执行:
g++ main.cpp -I. -L. -lmathutil -o main
参数说明:
- -I.:告诉编译器在当前目录查找头文件
- -L.:告诉链接器在当前目录查找库文件
- -lmathutil:链接名为 libmathutil.a 的库(去掉前缀 lib 和后缀 .a)
运行结果:
./main 3 + 5 = 8 3 * 5 = 15
跨平台注意事项
不同系统对静态库命名和工具链略有差异:
- Linux/macOS 使用 g++ 和 ar,库名以 libxxx.a 形式存在
- Windows 上可用 MinGW 或 MSVC,MinGW 同样支持 .a 格式;MSVC 使用 lib.exe 创建 .lib 文件
- CMake 等构建系统可帮助统一管理跨平台静态库构建
例如用 CMake 构建静态库:
add_library(mathutil STATIC math_util.cpp)
链接时:
target_link_libraries(myapp mathutil)
基本上就这些。掌握静态库的编译与链接,有助于模块化C++项目结构,提升维护效率。关键是理解“先编译成 .o,再打包成 .a,最后链接进主程序”这一流程。










