阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

手机号码,快捷登录

老司机
查看: 983|回复: 1

[转帖] linux库文件编写入门

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-2-8 16:24:02 | 显示全部楼层 |阅读模式
    一、为什么要使用库文件
      我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,
      实现代码也相同,也是我们所说的重复代码。比如,很多项目里都有一个用户验证的功能。
      代码段如下:
      //UserLogin.h文件,提供函数声明
      int IsValidUser(char* username, int namelen);
      //UserLogin.c文件,实现对用户信息的验证
      int IsValidUser(char* username, int namelen)
      {
      int IsValid = 0;
      /*下面是具体的处理代码,略去*/
      return IsValid
      }
      如果每个项目都保存着这两个UserLogin.hUserLogin.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");
      }
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2012-3-31 09:45
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2012-3-17 13:34:17 | 显示全部楼层
    学习中。。。。。。。。。。。。。。
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表