在 Ubuntu 下用 C++ 链接静态库(.a 文件),一般流程是:编译源文件 → 生成静态库 → 链接静态库。下面从基础到常见用法一步步说明。
静态库在 Linux 下通常是:
libxxx.a
链接时,库代码会被直接拷贝进可执行文件。
// mathadd.cpp
int add(int a, int b) {
return a + b;
}
// mathadd.h
#pragma once
int add(int a, int b);
g++ -c mathadd.cpp -o mathadd.o
ar rcs libmathadd.a mathadd.o
✅ 生成:libmathadd.a
// main.cpp
#include "mathadd.h"
#include <iostream>
int main() {
std::cout << add(2, 3) << std::endl;
}
g++ main.cpp -L. -lmathadd -o main
解释:
-L.:在当前目录找库-lmathadd:链接 libmathadd.a如果库不在当前目录:
g++ main.cpp -L/path/to/lib -lmathadd -o main
有时系统有同名 .so,你想强制静态链接:
g++ main.cpp -L. -l:libmathadd.a -o main
或:
g++ main.cpp /path/libmathadd.a -o main
⚠️ 库要放在源文件 / 目标文件后面
✅ 正确:
g++ main.cpp -lmathadd
❌ 错误:
g++ -lmathadd main.cpp
ar t libmathadd.a
| 错误 | 原因 |
|---|---|
undefined reference |
没加 -lxxx 或顺序错 |
cannot find -lxxx |
没加 -L 或名字不对 |
链接了 .so 而不是 .a |
同名动态库优先 |
add_library(mathadd STATIC mathadd.cpp)
target_link_libraries(main mathadd)
如果你有:
可以继续问,我可以给你具体命令。