静态库在编译时被整合进可执行文件,运行时不依赖外部文件。Linux下使用ar命令将目标文件打包为.a文件,Windows下用lib工具生成.lib文件;通过g++或cl命令链接静态库到主程序,CMake可简化跨平台构建流程,实现代码复用与模块化开发。

在C++项目开发中,静态库是一种将多个目标文件打包成一个归档文件的方式,供其他程序链接使用。静态库在编译时被完整复制到可执行文件中,因此运行时不依赖外部库文件。Linux下通常为 .a 文件(archive),Windows下为 .lib 文件(静态库)。下面介绍如何创建和使用静态库。
1. 编写库源码
假设我们要创建一个简单的数学函数库:
math_utils.h
#ifndef MATH_UTILS_H #define MATH_UTILS_Hint add(int a, int b); int multiply(int a, int b);
endif
math_utils.cpp
立即学习“C++免费学习笔记(深入)”;
#include "math_utils.h"int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }
2. 编译为目标文件
先将源文件编译为对象文件(.o 或 .obj),不进行链接。
Linux/macOS:
g++ -c math_utils.cpp -o math_utils.o
Windows (使用 MSVC):
cl /c math_utils.cpp
生成 math_utils.obj
3. 创建静态库
使用归档工具将目标文件打包成静态库。
Linux/macOS:
ar rcs libmathutils.a math_utils.o
-
rcs: r 表示替换,c 创建新库,s 生成索引 - 生成
libmathutils.a
Windows (MSVC):
lib /OUT:mathutils.lib math_utils.obj
生成 mathutils.lib
4. 使用静态库
编写主程序调用库中的函数。
main.cpp
#include "math_utils.h" #includeint main() { std::cout << "3 + 5 = " << add(3, 5) << "\n"; std::cout << "3 * 5 = " << multiply(3, 5) << "\n"; return 0; }
链接静态库编译可执行文件
Linux/macOS:
g++ main.cpp -L. -lmathutils -o main
-
-L.: 指定库搜索路径为当前目录 -
-lmathutils: 链接 libmathutils.a(去掉前缀和后缀)
或直接指定库文件:
g++ main.cpp math_utils.o -o main
Windows (MSVC):
cl main.cpp mathutils.lib
或
cl main.cpp /link mathutils.lib
5. 注意事项与技巧
- 确保头文件路径正确:使用
-I指定头文件目录(如-I./include) - 静态库不会在运行时加载,所有代码会合并进可执行文件
- 若修改了库源码,需重新编译并更新库文件
- 可以用
nm libmathutils.a查看库中包含的符号 - 跨平台项目建议统一命名规则和构建脚本(如 CMake)
6. 使用 CMake 管理静态库(推荐)
CMakeLists.txt
cmake_minimum_required(VERSION 3.10) project(MathLib)创建静态库
add_library(mathutils STATIC math_utils.cpp)
主程序
add_executable(main main.cpp)
链接库
target_link_libraries(main mathutils) target_include_directories(mathutils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
构建流程:
mkdir build cd build cmake .. make
自动生成静态库并完成链接。
基本上就这些。掌握静态库的创建与使用,有助于模块化开发和代码复用。










