gcc 静态库制作之ar命令使用

前言

我们通常把一些公用函数制作成函数库,供其他程序使用。函数库分为静态库和动态库两种。本文讲解如何制作属于自己的静态库。

什么是静态库?

通常来说,静态库以.a作为后缀,且以lib开头。类似于libxxx.a。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

ar命令详解

Linux ar命令用于创建或者操作静态库。

ar命令的参数如下:

参数意义
-r将objfile文件插入静态库尾或者替换静态库中同名文件
-x从静态库文件中抽取文件objfile
-t打印静态库的成员文件列表
-d从静态库中删除文件objfile
-s重置静态库文件索引
-v显示详细信息
-c创建静态库文件

制作静态库

test.c

#include <stdio.h>
#include "test.h"


void test(){

	printf("This is a static library\n");

}

test.h

#define __TEST_H__
#ifndef __TEST_H__

void test();

#endif

编译成可重定位文件,即生成.o文件:

在这里插入图片描述

为了制作成静态库,我们需要使用ar命令。

 ar -rcs libtest.a test.o   #库名一般以.a为扩展名,以lib开头
 ar -t libtest.a  #查看内容
test.o

在这里插入图片描述输出信息可以看到,静态库以.a作为后缀,且以lib开头,这时候就制作好了自己的静态库了。

制作好了静态库,下面来使用它。

静态库的使用

编写一个main.c文件进行测试:

在这里插入图片描述
main.c

#include <stdio.h>
#include "test.h"

int main(int argc, char const *argv[])
{
	test();
	
	return 0;
}

在这里插入图片描述
出现信息为test未定义引用,原因是test已经编译成静态库。

解决办法为:
在这里插入图片描述

静态库的代码在编译时链接到应用程序中,因此编译时库文件必须存在,并且需要通过"-L"参数传递路径给编译器。

链接的库名为libtest.a,在链接的时候,去掉开头的lib和后缀.a,前面再加l,就变成了-ltest,其他库也是类似。

例如,你如果看到程序链接使用-lm,说明它使用了名为libm.a的库。可以参考这一篇在编译时时为什么要链接 -lm

总结

编译静态库时先使用-rcs选项,再利用ar工具产生,然后把一些文件可重定位文件打包在一起。

在这里插入图片描述
(微信公众号【程序猿编码】)

在这里插入图片描述
(添加本人微信号,备注加群,进入程序猿编码交流群,领取学习资料,获取每日干货)

微信公众号【程序猿编码】,这里Linux c/c++ 、Go语言、数据结构与算法、网络编程相关知识,常用的程序员工具。还有汇聚精炼每日时政、民生、文化、娱乐新闻简报,即刻知晓天下事!

  • 15
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值