Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189103
  • 博文数量: 49
  • 博客积分: 635
  • 博客等级: 中士
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 12:58
文章分类

全部博文(49)

文章存档

2012年(9)

2011年(40)

分类: C/C++

2011-11-18 23:02:00

    一个库文件就是多个目标文件的集合,一般情况下,库文件是有编入索引的,这样就便于查找其中的函数、变量等等。Unix系统(或者说大部分现代操作系统)允许我们两种库——静态库(static libraries)和动态库(shared (or dynamic) libraries)。

    静态库是目标文件的简单集合,由链接器在链接阶段加入程序中,在程序运行阶段并不需要,相反,此时为了运行程序只有可执行文件是需要的。建立一个静态库最基本的程序是“ar”——“archiver”,它能建立或者修改静态库中的目标文件,假设已经有三个目标文件,util_file.o、util_net.o util_math.o,那么我们可以这样建立一个静态库:
  1. ar rc libutil.a util_file.o util_net.o util_math.o
    这样我们就建立了一个名为libutil.a的静态库,选项c:告诉ar,如果库文件不存在就建立库文件,选项r,用新的目标文件替换旧文件。
    建立或者修改库文件之后,需要建立索引:
  1. ranlib libutil.a
   当存档文件索引建立时间比文件最后修改时间早时,编译器会提示索引过期,并且程序终止。面对这种情况,有两种解决方法:
   1、再次运用ranlib程序,重新生成索引
   2、当复制存档文件到其他目录时,用cp -p命令

   在一切准备就绪之后,接下来就是将库文件应用到我们自己的程序中了。如下:
  1. cc main.o -L. -lutil -o prog
   注意-L.中的"."表示当前目录。而对于库文件libutil.a,我们丢弃了前缀lib和后缀.a。 恩,差不多就是这样了。。。
阅读(1811) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~