在 CentOS 上配置和使用 C++ 静态库(.a 文件),一般分为 三步:
1️⃣ 编写源码并生成静态库
2️⃣ 配置编译环境
3️⃣ 链接静态库进行编译
下面用 完整示例 说明。
假设目录结构如下:
project/
├── include/
│ └── mylib.h
├── src/
│ └── mylib.cpp
├── main.cpp
include/mylib.h#ifndef MYLIB_H
#define MYLIB_H
void hello();
#endif
src/mylib.cpp#include <iostream>
#include "mylib.h"
void hello() {
std::cout << "Hello from static library!" << std::endl;
}
main.cpp#include "mylib.h"
int main() {
hello();
return 0;
}
sudo yum install -y gcc gcc-c++ make
g++ -c src/mylib.cpp -Iinclude -o mylib.o
ar rcs libmylib.a mylib.o
✅ 生成:
libmylib.a
g++ main.cpp -Iinclude -L. -lmylib -o main
参数说明:
| 参数 | 含义 |
|---|---|
-Iinclude |
头文件搜索路径 |
-L. |
库文件搜索路径(当前目录) |
-lmylib |
链接 libmylib.a |
-o main |
输出可执行文件 |
运行:
./main
输出:
Hello from static library!
| 类型 | 扩展名 | 是否嵌入可执行文件 |
|---|---|---|
| 静态库 | .a |
✅ 是 |
| 动态库 | .so |
❌ 否 |
查看是否成功静态链接:
ldd main
✅ 如果没有 libmylib.so,说明是静态链接。
undefined reference to xxx原因:
-lmylib✅ 正确顺序(源文件在前,库在后):
g++ main.cpp -L. -lmylib
ar 命令不存在sudo yum install -y binutils
查看版本:
g++ --version
如需升级(示例):
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-11
scl enable devtoolset-11 bash
CXX = g++
CXXFLAGS = -Iinclude
all: main
libmylib.a: src/mylib.cpp
$(CXX) -c $< -o mylib.o
ar rcs $@ mylib.o
main: main.cpp libmylib.a
$(CXX) main.cpp -Iinclude -L. -lmylib -o $@
clean:
rm -f *.o *.a main
使用:
make
./main
✅ 在 CentOS 配置 C++ 静态库流程:
.cpp → .oar 生成 .ag++ main.cpp -Iinclude -L. -lmylib
如果你需要 CMake 配置静态库、多目录工程、或 与动态库混合使用,可以继续问我。