在 Ubuntu 下用 C++ 生成静态库(.a 文件),一般步骤如下:
假设有两个文件:
hello.h
#pragma once
void sayHello();
hello.cpp
#include <iostream>
#include "hello.h"
void sayHello() {
std::cout << "Hello, static library!" << std::endl;
}
使用 -c 参数,只编译不链接:
g++ -c hello.cpp -o hello.o
ar 生成静态库ar rcs libhello.a hello.o
说明:
r:插入或替换c:创建库(不显示警告)s:生成索引(加速链接)生成文件:libhello.a
写一个测试程序:
main.cpp
#include "hello.h"
int main() {
sayHello();
return 0;
}
编译并链接静态库:
g++ main.cpp -L. -lhello -o main
参数说明:
-L.:在当前目录找库-lhello:链接 libhello.a运行:
./main
输出:
Hello, static library!
库命名规则
libxxx.a-lxxx多个源文件
g++ -c a.cpp b.cpp
ar rcs libtest.a a.o b.o
查看静态库内容
ar t libhello.a
C++ 名称改编(Name Mangling)
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
如果你需要 CMake 生成静态库 或 和动态库对比,也可以告诉我。