静态库是在编译时被复制到可执行文件中的归档文件,Linux下以.a为扩展名,Windows下常用.lib;通过g++ -c生成目标文件,再用ar rcs打包为静态库,最后在主程序中包含头文件并链接库文件即可使用。
在C++开发中,静态库是一种将多个目标文件打包成一个归档文件的方式,供其他程序链接使用。使用静态库可以提高
代码复用
性、加快编译速度,并隐藏实现细节。下面介绍如何创建和使用静态库。
什么是静态库
静态库(Static Library)是在程序编译时被完整复制到可执行文件中的库。Windows下通常以
.lib
为扩展名,Linux/Unix下以
.a
为扩展名。一旦链接完成,可执行文件不再依赖该库文件。
创建静态库
假设我们想把一些通用函数打包成静态库,步骤如下:
1. 编写源文件
创建两个文件:
math_utils.h
和
math_utils.cpp
math_utils.h
立即学习
“
C++免费学习笔记(深入)
”;
math_utils.cpp
2. 编译为目标文件
使用g++或clang++编译但不链接:
Linux/
mac
OS:
Windows (MinGW):
3. 打包成静态库
使用ar工具将目标文件归档:
Linux/macOS:
Windows (MinGW):
现在你得到了一个静态库文件
libmathutils.a
(Windows也是.a,不是.lib)。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
使用静态库
编写主程序来使用这个库。
main.cpp
编译并链接静态库
确保头文件和库文件在正确路径。
命令行编译:
或分开写:
如果头文件不在当前目录,使用-I指定路径:
如果库文件放在lib目录:
注意:-lmathutils 表示链接 libmathutils.a,系统会自动查找。
跨平台注意事项
不同编译器生成的目标文件格式不同,不能混用。例如MinGW生成的.a不能直接用于MSVC。MSVC使用的静态库是
.lib
格式,需用Visual Studio工具链创建。
在Visual Studio中创建静态库:
新建项目选择“静态库”模板
添加 .h 和 .cpp 文件
编译后生成 .lib 文件
在其他项目中包含头文件并附加库目录和依赖库
基本上就这些。创建和使用静态库并不复杂,关键是理解编译、归档和链接的过程。只要保证头文件与库版本匹配,路径设置正确,就能顺利集成。
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int multiply(int a, int b);
endif
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
g++ -c math_utils.cpp -o math_utils.og++ -c math_utils.cpp -o math_utils.oar rcs libmathutils.a math_utils.oar rcs libmathutils.a math_utils.o
#include "math_utils.h"
#include
int main() {
std::cout << "Add: " << add(3, 4) << "\n";
std::cout << "Multiply: " << multiply(3, 4) << "\n";
return 0;
}
g++ main.cpp libmathutils.a -o maing++ -c main.cpp -o main.og++ main.o libmathutils.a -o maing++ main.cpp -I./include libmathutils.a -o maing++ main.cpp -L./lib -lmathutils -o main