静态库的制作和使用
更多资料下载,冲击月薪过万,一线经验工程师录制,
干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com
我们实现的add函数,可以供项目中的所有人调用。如果你想将add函数分享给更多的人使用,可以把add函数封装成一个库和对应的头文件,发布到互联网上供其他人下载使用。别人在编写程序时,可以直接引用你的库文件,实现了代码复用,避免了重复造轮子,进而可以大大提高工作效率。
如何制作一个静态库
我们还以这个程序为例:
//add.c
int add(int a, int b)
{
int result;
result = a + b;
return result;
}
//add.h
int add(int a, int b);
在add.c中,我们实现了add函数;在add.h中,我们对add函数进行了声明。接下里,我们就可以使用ar命令将add函数封装成一个静态库:
root@ubuntu:/home/code# ls
add.c add.h
root@ubuntu:/home/code# gcc -c add.c
root@ubuntu:/home/code# ls
add.c add.h add.o
root@ubuntu:/home/code# ar rcs libtest.a add.o
root@ubuntu:/home/code# ls
add.c add.h add.o libtest.a
ar命令其实就是一个备份打包命令,用于创建归档文件(archive),使用ar命令可以将目标文件(.o)打包为静态链接库(.a)。因此在打包之前,我们需要将打包的add函数源文件编译生成对应的目标文件add.o,然后就可以通过ar命令打包成静态库文件libtest.a了。ar命令的常用参数如下:
- -r:往库中添加成员文件
- -c:创建存档(静态库)
- -s:将成员文件索引写入存档,或更新现有索引
如何使用静态库
我们将add函数制作成对应的静态库libtest.a后,就可以和对应的头文件add.h 一起分享到网上了。当别人下载了你的静态库和对应的头文件后,该如何使用呢?
使用方法很简单,将静态库libtest.a和对应的头文件add.h放在某个目录下,然后在该目录下创建一个test.c文件:
//test.c
#include <stdio.h>
#include "add.h"
int main(void)
{
int sum;
sum = add(3, 4);
printf("sum = %d\n", sum);
return 0;
}
在这个程序中,因为要引用libtest.a静态库中的add函数,所以在使用之前,我们要先#include对应的add.h头文件。接下来我们就可以直接编译 test.c 文件了:
root@ubuntu:/home/test# ls
add.h libtest.a test.c
root@ubuntu:/home/test# gcc test.c -L. -ltest
root@ubuntu:/home/test# ls
add.h a.out libtest.a test.c
root@ubuntu:/home/test# ./a.out
sum = 7
gcc在编译程序时,-L参数选项表示要引用的库的路径,因为libtest.a跟test.c在同一路径下,所以-L.表示当前目录。-ltest表示要引用的库的名字,libtest.a静态库文件的前缀是lib,后缀是.a,库的名字是test。
专门为嵌入式设计的C语言进阶视频教程:《C语言嵌入式Linux高级编程》,一共9期,涉及计算机体系结构、ARM汇编与反汇编、程序的编译链接原理、堆栈内存、Linux内核的面向对象编程思想、多任务编程、C语言的模块化编程等专题,具体课程详情可点击淘宝:C语言嵌入式Linux高级编程