在 Linux 下用 C++ 使用静态库(.a 文件),一般分三步:生成静态库 → 编译目标文件 → 链接静态库。下面给你一个完整、实用的做法。
假设有两个文件:
math_util.h#ifndef MATH_UTIL_H
#define MATH_UTIL_H
int add(int a, int b);
#endif
math_util.cpp#include "math_util.h"
int add(int a, int b) {
return a + b;
}
main.cpp#include <iostream>
#include "math_util.h"
int main() {
std::cout << add(1, 2) << std::endl;
return 0;
}
g++ -c math_util.cpp -o math_util.o
ar 打包成静态库ar rcs libmathutil.a math_util.o
✅ 生成:
libmathutil.a
命名规范:libxxx.a
g++ main.cpp libmathutil.a -o main
运行:
./main
-L 和 -l(推荐)把 libmathutil.a 放到 lib/ 目录:
g++ main.cpp -L./lib -lmathutil -o main
说明:
-L./lib:库搜索路径-lmathutil:链接 libmathutil.aCXX = g++
CXXFLAGS = -Wall -O2
libmathutil.a: math_util.o
ar rcs libmathutil.a math_util.o
math_util.o: math_util.cpp math_util.h
$(CXX) -c math_util.cpp
main: main.cpp libmathutil.a
$(CXX) main.cpp -L. -lmathutil -o main
clean:
rm -f *.o *.a main
使用:
make
./main
Linux 下 库要放在源文件后面:
g++ main.cpp -lmathutil # ❌ 可能报错
g++ main.cpp -L. -lmathutil # ✅
.a,编译时拷贝进程序.so,运行时加载ldd main
如果 没有显示 libmathutil,说明是静态链接成功。
如果你是用 CMake / vcpkg / 第三方库(如 OpenCV、Boost) 或 交叉编译,可以告诉我具体场景,我可以给你对应配置。