静态库的制作和使用

加入嵌入式技术QQ群:398294860,免费获取嵌入式技术文档,嵌入式最新学习路线指南,更多嵌入式教程,访问宅学部落淘宝店:https://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高级编程