GCC 静态链接库

获取更多嵌入式、Linux学习资料,获取独家嵌入式Linux学习路线地图,欢迎加群:398294860,观看更专业、更系统地嵌入式视频教程,请关注:wanglitao.taobao.com

我们在编写程序时,会大量使用C标准库中的函数:比如printf、scanf。对于这些经常被使用的通用函数,C标准把它们封装在C标准库中,用户可以直接调用,不需要自己重复写代码了。

当然,我们也可以通过gcc命令,将自己实现的一些函数封装成库,提供给其他开发者使用。

制作静态链接库

假如现在有add.c和sub.c 源文件,分别实现了加法函数add()和减法函数sub():

// add.c
int add(int a, int b)
{
    return a + b;
}

// sub.c
int sub(int a, int b)
{
    return a - b;
}

现在将它们编译生成一个静态库libmath.a,供其他程序调用:

# gcc -c add.c 
# gcc -c sub.c 
# ls
add.c  add.o  sub.c  sub.o

# ar rcs libmath.a add.o sub.o
# ls
add.c  add.o  libmath.a  sub.c  sub.o

生成的libmath.a就是一个静态库,里面包含了我们实现的add()函数和sub()函数:

# ar t libmath.a 
add.o
sub.o

# nm libmath.a 
add.o:
0000000000000000 T add
sub.o:
0000000000000000 T sub

使用静态链接库

接下来,我们就可以编写一个main()函数,然后在main函数里调用它们。

# cat main.c 

int add(int a, int b);
int sub(int a, int b);

int main(void)
{
    add(1, 2);
    sub(4, 3);
    return 0;
}

在编译mainc源文件时,因为调用了libmath.a库中的add和sub函数,编译时要使用gcc -l指定库的名字,使用-L指定库的路径:

# ls
libmath.a  main.c

# gcc main.c -L./ -lmath

# ls
a.out  libmath.a  main.c
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客