在 C++ 中使用.a 静态库

在 archlinux 上成功使用.a 静态库.

主要代码

myadd.cpp 和 myadd.h

1
2
// myadd.h
int add(int a, int b);
1
2
3
4
5
6
7
// myadd.cpp
#include "myadd.h"
#define N 0

int add(int x, int y) {
return x + y + N;
}

使用 g++ -c myadd.cpp -o myadd.o 来编译 myadd.cpp 成机器码myadd.o

使用 ar rcs libmyadd.a myadd.o 将机器码 myadd.o 打包成静态库libmyadd.a

1
2
3
4
# 汇编成机器码 
g++ -c myadd.cpp -o myadd.o
# 打包
ar rcs libmyadd.a myadd.o

关于 ar 命令的详细内容, 可以看我的这篇文章.

main.cpp

1
2
3
4
5
6
7
8
9
10
// main.cpp
#include <iostream>
#include "myadd.h"

int main()
{
int sum = add(1, 2);
std::cout << "add(1, 2) = " << sum << std::endl;
return 0;
}

使用 g++ main.cpp -static -L. -lmyadd && ./a.out 获得如下输出

1
add(1, 2) = 3

一些注释

  • -L. -lmyadd参数的意思是在 ./ 目录去寻找libmyadd.a
  • -static将所有的库以静态的方式链入可执行程序, 这样生成的可执行程序, 不再依赖任何库

目录结构

1
2
3
4
5
6
7
test/
├── a.out
├── main.cpp
├── myadd.cpp
├── myadd.h
├── myadd.o
└── libmyadd.a