创建一个静态库文件
本文,我们将创建一个含有int add(int a, int b);
方法的静态库,并用自己写的代码调用它。
创建静态库
新建文件add.h
:
c
int add(int a, int b);
add.h
对函数进行了声明。
此文件是必须的,因为其他代码调用它时,在代码编译时需要add这个”函数的声明”。
新建文件add.c
:
c
#include "add.h"
int add(int a, int b) {
return (a+b)%65535;
}
这个文件对add.h
中的函数进行了具体实现。
编译add.c
:
bash
gcc -c add.c -o add.o
用ar
工具将目标文件打包成静态库文件libadd.a
(名字必须以lib
开头,且后缀必须为.a
)。ar
工具是用于创建静态库的工具:
bash
ar rcs libadd.a add.o
使用静态库
写一个简单的main.c
来调用静态库libadd.a
:
c
#include <stdio.h>
#include "add.h"
int main() {
printf("%d
", add(1,65535));
}
编译main.c
:
bash
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
:
bash
./main
可以看到执行结果为1。
之前写的博客Cmake add_subdirectory() 使用其实也是将每个子目录构建成了一个静态库,最终去链接这些库,也因此实现了模块化、并行构建、不重复构建的好处。