- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、为什么要使用库文件
我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的
功能相同,
实现代码也相同,也是我们所说的重复代码。比如,很多项目里都有一个用户验
证的功能。
代码段如下:
//UserLogin.h 文件,提供函数声明
int IsValidUser(char* username, int namelen);
//UserLogin.c 文件,实现对用户信息的验证
int IsValidUser(char* username, int namelen)
{
int IsValid = 0;
/*下面是具体的处理代码,略去*/
return IsValid;
}
如果每个项目都保存着这两个UserLogin.h 和UserLogin.c 文件,会有以下几个
弊端:
1、每个项目里都有重复的模块,造成代码重复。
2、代码的重用性不好,一旦IsValidUser 的代码发生了变化,为了保持设计的一
致性,
我们还要手工修改其他项目里的UserLogin.c 文件,既费时又费力,还容易出
错。
库文件就是对公共代码的一种组织形式。
为了解决上面两个弊端,就提出了用库文件存放公共代码的解决方案,其要点
就是
把公共的(也就是可以被多次复用的)目标代码从项目中分离出来,统一存放到
库文件中,
项目要用到这些代码的时候,在编译或者运行的时候从库文件中取得目标代码
即可。库文件
又分两种:静态库和动态库。
二、静态库与动态库
如果程序是在编译时加载库文件的,就是使用了静态库。
如果是在运行时加载目标代码,就成为动态库。
换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到程序的代码段,
程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,
在运行时去查找
库文件和函数体,程序的体积基本变化不大。
静态库的原则是“以空间换时间”,增加程序体积,减少运行时间;
动态库则是“以时间换空间”,增加了运行时间,但减少了程序本身的体积。
下面我们就以实际例子来看看如何使用这两种库.
三、静态库的编写和使用
1、概述
静态库文件的扩展名一般为.a,其编写步骤很简单。
⑴编写函数代码
⑵编译生成各目标文件
⑶用ar 文件对目标文件归档,生成静态库文件。
注意归档文件名必须以lib 打头。
使用要点:
⑴在gcc 的-I 参数后加上静态库头文件的路径。
⑵在gcc 的-L 参数后加上库文件所在目录
⑶在gcc 的-l 参数后加上库文件名,但是要去掉lib 和.a 扩展名。
比如库文件名是libtest.a 那么参数就是 -l test
2、编写最简单的静态库文件
编写如下两个文件,注意放在同一目录中
myalib.h //静态库头文件
myalib.c //静态库实现文件
//myalib.h 文件的内容
void test();
//myalib.c 文件的内容
#inlcude
void test()
{
printf(test\n);
}
3、制作库文件
⑴生成目标文件
gcc -c myalib.c
执行完后会生成一个myalib.o 文件
⑵用ar 命令归档,格式为ar -rc 生成的档案文件名 .o 文件名列表
再次提醒,归档文件名一定要以lib 打头, .a 结尾。
ar -rc libtest.a myalib.o
执行完后会生成一个libtest.a 文件
4、使用库文件
⑴编写一个测试程序main.c,内容为
//main.c 测试静态库调用的程序
#include myalib.h //要把函数的头文件包含进来,否则编译时会报错
int main(int argc,char* argv[])
{
test();
return 0;
}
⑵编译目标文件,注意要把静态库头文件的路径加到-I 参数里面
gcc -I /root/exercise -o main.o -c main.c
现在生成了一个main.o 文件
⑶生成可执行文件,注意要把静态库文件的路径加到-L 参数里面,
把库文件名(去掉打头的lib 和结尾的.a)加到-l 参数后面。如下面所示
gcc -o main -L/root/exercise main.o -ltest
此时就会生成一个名为ma
您可能关注的文档
- 面试题目答案指南.doc
- linux中的用户组及各种权限.doc
- struts1及spring整合.doc
- 第二章 交往礼仪——握手、介绍.doc
- 企业分层培训幻灯片.doc
- 论我国民事审级制度之重构探讨和研究.doc
- 清槽技术交底教材.docx
- 细化解读课程标准案例设计陈玉娥讲述.doc
- 解读和重构:继承中的财产移转机制研究.doc
- ICMP攻击及基于ICMP的路由欺骗技术.doc
- 岸基供电系统 第4部分:工频电源.pdf
- 人教版八下英语Unit 5 What were you doing when the rainstorm came_测试卷.docx
- 热带作物品种区域试验技术规程 木薯.pdf
- 草原防火阻隔带建设技术规程.pdf
- 渔用气胀救生筏技术要求和试验方法-.pdf
- 浙江省杭州市2024-2025学年八年级下学期期中考试英语试卷(含答案).docx
- 重庆市渝北区六校联盟2024-2025学年九年级下学期期中教学大练兵语文试卷.docx
- 食品安全-花椒籽油 (2).pdf
- 2025年海博思创分析报告:储能集成“小巨人”,国内外业务进展可期.pdf
- 地理标志产品 宽城板栗.pdf
最近下载
- 毕业设计(论文)-徐州某小区1#住宅楼工程工程量清单与招标控制价的编制.docx
- 南山森林抚育补贴试点项目作业设计.pdf VIP
- 2022年北京市自来水集团有限责任公司校园招聘考试笔试试题及答案解析.pdf VIP
- 全国《职业教育》专业知识(重点)考试题库(300题).docx
- 青春期男女生交往.pptx
- 北京市自来水集团有限责任公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版及参.docx VIP
- 物理专业英语词汇.pdf
- 简易装修合同电子版3篇 .pdf VIP
- 瓦楞纸箱印刷过程中的质量控制.pdf
- GB∕T 35379-2017 木门分类和通用技术要求(高清版).pdf
文档评论(0)