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直到进入高级恢复界面…

C语言加减乘除运算

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

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

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

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

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

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

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

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()#初始化画笔位置…

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

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

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

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

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

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

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 …

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

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

均值差异大但是t检验不显著_T检验原理及介绍

T检验原理及应用介绍一、T检验的应用场景:应用场景:可以用于研究工艺更改前后对于产品质量是否有显著提高;研究不同的热处理温度对于产品性能,晶粒度等是否有明显效果;研究不同的设备或人员对于产品质量的影响是否有差…

javafx ui_调用以验证JavaFX UI的响应能力

javafx ui最近,吉姆韦弗(Jim Weaver)在他的Surface Pro上安装了我的小图片索引应用“ picmodo”作为演示,图形用户界面(GUI)变成了垃圾。 显然,Windows Tablet上JavaFX的基本字体大小很高&…

众辰nz200变频器使用说明书_ABB变频器

ABB变频器,广州丰电自动化设备有限公司是一家专业从事工业计算机、工业自动化产品、电线电缆、仪器仪表销售、安装、维修;变频控制系统、变频恒压供水系统、变频节能系统的设计及安装,提供自动化工程技术服务及成套解决方案于一体的科技企业。…

pb 执行存储过程带参数_PB级海量数据服务平台架构设计实践

基于PB级海量数据实现数据服务平台,需要从各个不同的角度去权衡,主要包括实践背景、技术选型、架构设计,我们基于这三个方面进行了架构实践,下面分别从这三个方面进行详细分析讨论:实践背景该数据服务平台架构设计之初…

C语言*运算符和运算符

取址运算符&用来取得其操作数的地址。如果操作数 x 的类型为 T,则表达式 &x 的类型是 T 类型指针(指向 T 的指针)。取址运算符的操作数必须是在内存中可寻址到的地址。换句话说,该运算符只能用于函数或对象(例…

css 竖行进度图_前端学习--汇集了大量 CSS 的使用和学习的示例代码

CSS-Inspiration这里可以让你寻找到使用或者是学习 CSS 的灵感,以分类的形式,展示不同 CSS 属性或者不同的课题使用 CSS 来解决的各种方法。目前已有上百种的CSS 实现示例,代码可以拿 来即用LayoutCSS实现瀑布流布局(display: flex)CSS实现瀑…

socket io 不使用redis_Redis这么快,线程模型竟然是单线程

Redis的线程模型记住一句话:单进程单线程,IO多路复用。单线程还这么快?是的,你没有看错,Redis是单线程处理的。这是因为Redis的设计者认为Redis是基于内存的操作,瓶颈在内存或者网络带宽而不是CPU。这样&am…

服务器系统装内存条,hp服务器怎么安装内存条 hp服务器内存推荐【图文】

服务器虚拟化增加了在每台惠普服务器上运行工作负载的数量,但是越来越多的计算需求则要求IT人员配备更好的HP服务器配件。因此需要对于HP服务器内存市场行情有一定的了解,而选择合适的HP服务器内存却是一件非常难的事情,今天就跟小编一起来看…

7个C语言小程序让你快速入门程序世界

1、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码:#include#…