2009年4月1日星期三

Static library & dynamic library -- linux系统下的静态库与动态库

关于实现动态库链接的makefile, 看了<<Advanced Linux
Programming>>,笔记如下:
我们知道,几乎所有的程序在运行时都会链接到一个或多个库。比如C语言的printf函数,调用此函数时就会用到c的标准输入输出库;而在GUI下面,会用到对应的图形库;调用数据库时,会用到数据库系统提供的相应的库,等等。
1.静态库
静态库(archive / static library)就是一些简单的目标文件整合而成的单个文件。可以暂且把它看作是windows下的.lib文件。当把这个库提供给某个文件作为某个程序的接口(不知道"接口"用在这里恰不恰当,个人理解的)时,链接就会把这个库解压,然后搜寻需要的接口,把它加载到程序中来。
linux中静态库的后缀是.a,前缀默认为lib。使用ar命令可以把一个或多个目标文件打包成一个文件。基本格式是:
ar -cr lib*.a opt1.o ... optn.o
其中 参数cr表示creat 和 replace,即创建并替换(这里的替换是指当文件创建成功时,如果有同名文件则替换之)。lib*.a是目标库文件。optx.o是目标文件列表。
生成了库文件后,需要该库的程序只需要在编译的时候加载改库即可。
比如定义了一个函数out(char *s);该函数输出对应的串
对应的文件如下:

out.h:
#ifndef OUT_H
#def OUT_H
void out(char *);
#endif

out.c
#include
#include"out.h"
void out(char *s){
  printf("%s\n",s);
}

main.c
#include"out.h"
int main(int argc,char ** argv){
  int i;
  for(i=1;i

没有评论: