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接口,用户可以直接进行调用,但是不能看到函数内部是怎么实现的。

声明:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10打开计算机黑屏怎么办,教你如何解决win10电脑开机黑屏的问题

今天来聊聊一篇关于教你如何解决win10电脑开机黑屏的问题的文章,现在就为大家来简单介绍下教你如何解决win10电脑开机黑屏的问题,希望对各位小伙伴们有所帮助。win10电脑开机黑屏的解决办法:操作步骤:1、win10系统开机的时候一直按F8直到进入高级恢复界面…

python初学者用什么开发环境_python初学者用什么开发环境

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"最权威的技术分享平台,获取最新的…

C语言加减乘除运算

加减乘除是常见的数学运算,C语言当然支持,不过,C语言中的运算符号与数学中的略有不同,请见下表。加法减法乘法除法求余数(取余)数学 -无C语言 -*/%C语言中的加号、减号与数学中的一样,乘号、除号…

joo工作流_让我们用jOOλ在Java 8中流式传输地图

joo工作流我想找到一种简单的方法来用Java 8流式传输Map 。猜猜是什么&#xff1f; 没有&#xff01; 为了方便起见&#xff0c;我期望的是以下方法&#xff1a; public interface Map<K, V> {default Stream<Entry<K, V>> stream() {return entrySet().st…

python中递归函数写法_python递归函数用法详解

上期我们介绍了函数式编程&#xff0c;这期内容就是关于递归的函数内容&#xff0c;本期还是按照老规矩&#xff0c;给大家进行核心整理&#xff0c;内容通俗易懂&#xff0c;搭配实际应用&#xff0c;以供大家理解。 关于递归&#xff1a; 百度解释&#xff1a;是指函数/过程/…

计算机实践ps折扇,用PS打造一把水墨画折扇的教程

一、新建一个600 * 400像素的文件&#xff0c;背景填充为白色&#xff0c;新建一个图层按Alt Ctrl ’调出往格线&#xff0c;然后选择钢笔工具勾出下图所示的路径。二、按Ctrl Enter把路径转为选区&#xff0c;填充为40%灰&#xff0c;再新建一个图层&#xff0c;在下端点一…

输出 Hello World 混乱C语言的源代码

下面的六个程序片段主要完成这些事情&#xff1a;输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过&#xff0c;只有最后一个需要动用C 的编译器g 才能编程通过。lns"http://www.w3.org/2000/svg" x"0px" y"0px" viewbox&…

电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率

开启高效设计&#xff0c;拒绝每天加班&#xff0c;设计助理插件&#xff0c;设计师高效设计神器&#xff0c;让你早下班的设计神器&#xff1b;今天介绍一款非常人性化的插件&#xff0c;尤其适合做电商设计的小伙伴设计助理插件官网视频介绍↓设计助理插件https://www.zhihu.…

hibernate乐观锁_Hibernate Collection乐观锁定

hibernate乐观锁介绍 Hibernate提供了一种乐观的锁定机制 &#xff0c;即使长时间通话也可以防止更新丢失 。 结合实体存储&#xff0c;跨越多个用户请求&#xff08;扩展的持久性上下文或分离的实体&#xff09;&#xff0c;Hibernate可以保证应用程序级的可重复读取 。 脏检…

turtle fillcolor_使Python中的turtle模块画图两只小羊

import turtle import time import math as m class Sheep(object):def __init__(self,xsize):self.t turtle.Turtle()self.xsize xsizet self.t# 画笔设置t.screen.screensize(canvwidth1000,canvheight500,bgwhite)t.pensize(2)t.speed(10)# t.hideturtle()#初始化画笔位置…

计算机鼠标介绍教学反思,《玩转鼠标》教学反思

《玩转鼠标》教学反思《玩转鼠标》是浙江摄影出版社出版的小学信息技术三年级第一单元中的第3课。这节课其实是上一节课的延伸&#xff0c;是一节复习课&#xff0c;起到巩固强化的目的&#xff0c;主要任务是让学生熟练掌握鼠标的基本操作方法&#xff0c;学会软件的打开和关闭…

openshift_在OpenShift上托管的WildFly实例上进行Arquillian测试

openshift技术提示&#xff03;54解释了如何为现有Java EE项目启用Arquillian。 在该技巧中&#xff0c;测试是针对本地安装的WildFly服务器运行的。 如果此WildFly实例在OpenShift上运行&#xff0c;那么同一个适配器也可以工作吗&#xff1f; 没有&#xff01; 因为与xlocal…

C语言实现魔方阵代码及解析

问题描述编写程序&#xff0c;实现如下表所示的5-魔方阵。172418152357141646132022101219213111825295-魔方阵问题分析所谓“n-魔方阵”&#xff0c;指的是使用1〜n2共n2个自然数排列成一个nn的方阵&#xff0c;其中n为奇数&#xff1b;该方阵的每行、每列及对角线元素之和都相…

600度近视眼恢复方法_近视孩子的家长看看:600度以上近视可致盲,不花钱恢复视力法...

现在孩子近视早已经不是什么新鲜事了&#xff0c;一个班级里面有3分之一的孩子都近视&#xff0c;数据显示&#xff1a;目前中国学生近视发病率接近60%&#xff0c;居世界首位&#xff01;中小学生近视率已达34.6%&#xff0c;高中近视率已达70%。患者人数超过六千万&#xff0…

xbox360 功率测试软件,【外星人 Alpha ASM100-1580 游戏主机使用总结】性能|电压|功耗|跑分_摘要频道_什么值得买...

外星人 Alpha ASM100-1580 游戏主机使用总结(性能|电压|功耗|跑分)在讨论性能之前&#xff0c;再最后看一看电源。NUC电源外置是必然&#xff0c;除了体积之外&#xff0c;还要考虑散热&#xff0c;所以&#xff0c;电源外置至少在目前来看还是最优解。这款电源是台达电子代工的…

openfire消息通知推送_微信小游戏内测「订阅消息」能力,这是召回用户的「大杀器」吗?...

作者&#xff1a;蒋鸿昌本文来源于「知晓程序」公众号。知晓云后端云服务&#xff0c;让你的小程序开发快人一步&#xff0c;添加「minsupport3」了解详情。知晓云​cloud.minapp.com一位投资人曾把最近 3 年微信公开课 Pro 版上张小龙的演讲称为「小程序 3 篇」&#xff1a;如…

api 数据gzip压缩_如何使用GZip和Jersey压缩Java REST API中的响应

api 数据gzip压缩在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0…

c语言心形告白代码实现

1.彩色告白includeincludeincludeincludedefine U 0.1define V 0.053void SetColor(unsigned short ForeColor,unsigned short BackGroundColor){HANDLE hConGetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor)|(BackGroundColor16));}int main(){int …

obs可以推到中转服务器吗,能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?...

"可以。请参考以下方法进行设置。使用OBS进行直播设置 > 串流 > 串流类型&#xff1a;自定义流媒体服务器URL&#xff1a;填写网易服务器提供的推流地址中&#xff0c;从头到live的部分&#xff0c;例如&#xff1a;rtmp://p12345678.live.126.net/live流密钥&#…

mysql 隐藏中间四位_MySQL知识体系——索引

本文直切主题&#xff0c;针对InnoDB引擎描述索引及优化策略。在开始之前&#xff0c;需要读者了解&#xff1a;二叉查找树(包括2-3查找树、红黑树等数据结构)MySQL的InnoDB引擎基础知识索引初探要了解索引&#xff0c;当然要了解其数据结构。树有很多应用&#xff0c;流行的用…