C语言文件生成静态库lib

最近看到一个模块的程序,在阅读的时候发现一个函数有引用,有声明,却找不到在哪里定义,模块只有头文件没有对应的.c文件,顿生疑惑,想着这程序怎么能运行呢。后来发现文件夹中有个后缀为.a的文件,在网上查得原来这是将函数封装成了一个静态库,这样既能实现功能,也对文件的内容起到了保护作用。

.a文件是静态链接库文件,一般会和一个头文件配合提供给用户使用,它是一个或多个对象文件(.o)的组合。

下面就以一个例子来说明怎么生成.a文件。

1. 创建三个文件Test.c , Test.h,main.c

内容分别如下:

Test.h

1 #ifndef _TEST_H_2 #define _TEST_H_3 4 int get_result(int firstNum,int secondNum);5 6 #endif //test.h

Test.c

1 #include "Test.h"23 int get_result(int firstNum,int secondNum)4 {5     return firstNum secondNum;6 }

main.c

#include#include "Test.h"
int main(){    int rlt;     rlt = get_result(23,7);    printf("The result is: rlt = %d\n",rlt);     return 0;}

其中Test.h,Test.c用于生成静态库,main.c用于测试。

2. 编译对象(.o)文件

使用: gcc -c Test.c,  确认是否生成.o文件。

3. 生成静态库

在linux环境下输入ar cr libmyTest.a Test.o,  查看当前目录下是否生成了库文件libmyTest.a文件,其中ar为linux环境下的创建、修改库文件的指令,  cr为该指令的选项命令.

4. 测试

输入gcc -o main  main.c libmyTest.a,  查看是否生成了main的可执行文件,然后再输入./main即可得到运行结果。  不需要在使用Test.c这个源文件进行编译操作, 直接操作.a库文件即可, 而且得到了.a库文件之后,即使没有了对应的.c源文件也可以编译运行。

所以模块厂商提供的程序的时候会只提供头文件和库文件,头文件用来说明API接口,用户可以直接进行调用,但是不能看到函数内部是怎么实现的。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值