快速业务通道

linux库文件的制作

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-19

  一、为什么要使用库文件

  我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,

  实现代码也相同,也是我们所说的重复代码.比如,很多项目里都有一个用户验证的功能.

  代码段如下:

  //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("testn");

  }

  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文件

  ⑶生成可执行文件,注意要把静态库

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号