创建一个静态库文件

本文共440字。
Copyright: 知识共享署名 非商业性使用 相同方式共享 4.0 国际许可协议 | CC BY-NC-SA 4.0

本文,我们将创建一个含有int add(int a, int b);方法的静态库,并用自己写的代码调用它。

创建静态库

新建文件add.h

1
int add(int a, int b);

add.h对函数进行了声明。

此文件是必须的,因为其他代码调用它时,在代码编译时需要add这个”函数的声明”。

新建文件add.c

1
2
3
4
5
#include "add.h"

int add(int a, int b) {
return (a+b)%65535;
}

这个文件对add.h中的函数进行了具体实现。

编译add.c

1
gcc -c add.c -o add.o

ar工具将目标文件打包成静态库文件libadd.a(名字必须以lib开头,且后缀必须为.aar工具是用于创建静态库的工具:

1
ar rcs libadd.a add.o

使用静态库

写一个简单的main.c来调用静态库libadd.a

1
2
3
4
5
6
#include <stdio.h>
#include "add.h"

int main() {
printf("%d\n", add(1,65535));
}

编译main.c

1
2
3
4
5
gcc -I lib main.c -L lib -l add -o main
# -I lib 表示gcc要在lib目录下搜索头文件
# -L lib 表示gcc要在lib目录下搜索库文件(如果同时找到动态库libadd.so和静态库libadd.a,其规则为优先链接静态库)
# -l add 表示gcc要链接名为libadd的库
# -o main 表示gcc要生成名为main的文件

生成的可执行文件main包含了libadd.a的内容。

执行main

1
./main

可以看到执行结果为1。

之前写的博客Cmake add_subdirectory() 使用其实也是将每个子目录构建成了一个静态库,最终去链接这些库,也因此实现了模块化、并行构建、不重复构建的好处。

链接