Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532479
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类: LINUX

2008-04-03 18:25:41

3.2.3  静态库

3.2.3.1 概述

      库文件的含 :就是一组处于可以“拿来就用”
的状态下的二进制目标代码。当有程序需要用的函
数库中的某个函数的时候,就会通过include语句
引用对此函数做出声明的头文件。编译器和 接程
序负责把程序代码和库函数结合 一起成为一个
独立的可执行程序。如果使用的不是标准的c语言
运行库而是某个扩展库,则必须指定它的位置和名
字 (使用-I,-L和-l参数)。

      静态库也叫归档文件,英文archive,后缀名
是a,比如libc.a和libX11.a等。

       自己建立归档文件的方法介绍:编写库函数的
时候,尽量把不同类型函数实现编写到不同的源代
码文件里面;然后使用gcc 的编译命令对各个文件
进行独立编译,从而得到各自的目标文件;然后使
用ar命令把各个目标文件打包 一起。

3.2.3.2 举例:如何建立和使用归档文件

      1)编写一个小函数库,这个函数库里面有两个
函数。分别使用两个源代码文件。

      2)各自代码如下:
      ――――――――fred.c--------------
      #include
      void fred(int arg)
       {
      printf("fred: you passed %d\n", arg);
      }

      ――――――――bill.c--------------
      #include
      void bill(char *arg)
       {
      printf("bill: you passed %s\n", arg);
      }
3)进行两个源代码文件的编译
      $ gcc        c bill.c fred.c
      $ ls *.o
      bill.o fred.o

      4)利用ar命令,把目标代码添加到一个库文
件中去。
      $ ar crv libfoo.a bill.o fred.o
      a   bill.o
      a   fred.o

      5)为了让库的使用者可以重复利用库所提供的
函数,要编写一个头文件,在其中声明库都是对外
提供了哪些函数。如果另外一个程序员打算使用库
所提供的服务,则必须 头文件中include这个头
文件。
      ――――――――lib.h--------------
      /*
      This is lib.h. It declares the functions
      fred and bill for users
      */

      void bill(char *);
      void fred(int);

      6)编写一个测试程序,使用库中的一个函数。
源代码如下:
      ―――――――program.c--------------

      #include "lib.h"
      int main()
       {
            bill("Hello World");
            exit(0);
      }

      7)编译和运行库的测试程序
      ―――――――第一个方法--------------
      $ gcc        c program.c
      $ gcc   o program program.o bill.o

$ ./program
      bill%3
阅读(1319) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~