在 CentOS 上配置 C++ 静态库(.a),通常分为 编译静态库 和 使用静态库 两部分。下面按常见流程一步步说明。
sudo yum install -y gcc gcc-c++ make
检查版本:
g++ --version
project/
├── include/
│ └── mylib.h
├── src/
│ └── mylib.cpp
├── main.cpp
└── lib/
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;
}
g++ -c src/mylib.cpp -I./include -o mylib.o
说明:
-c:只编译,不链接-I./include:指定头文件路径ar 打包成静态库ar rcs libmylib.a mylib.o
参数说明:
r:替换库中已有文件c:创建库s:生成索引(等价 ranlib)查看静态库内容:
ar t libmylib.a
mkdir -p lib
mv libmylib.a lib/
g++ main.cpp -I./include -L./lib -lmylib -o main
参数说明:
-I./include:头文件路径-L./lib:库文件路径-lmylib:链接 libmylib.a-o main:输出可执行文件运行:
./main
输出:
Hello from static library!
g++ main.cpp lib/libmylib.a -I./include -o main
ldd main
如果 没有显示 libmylib 相关依赖,说明是静态链接成功。
undefined reference to xxx原因:
-lmylib✅ 正确顺序:
g++ main.cpp -L./lib -lmylib
升级 gcc(如需要):
sudo yum install centos-release-scl
sudo yum install devtoolset-11
scl enable devtoolset-11 bash
# 编译静态库
g++ -c src/mylib.cpp -I./include -o mylib.o
ar rcs libmylib.a mylib.o
# 使用静态库
g++ main.cpp -I./include -L./lib -lmylib -o main
如果你需要:
可以继续问我。