Chinaunix首页 | 论坛 | 博客
  • 博客访问: 524377
  • 博文数量: 87
  • 博客积分: 4086
  • 博客等级: 上校
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 15:55
文章分类

全部博文(87)

文章存档

2012年(3)

2010年(13)

2009年(7)

2008年(64)

我的朋友

分类: LINUX

2009-05-15 11:43:11

1、静态库
静态库(static library or archive)是几个object文件的组合。假设你有两个c文件,test1.c和test2.c,先用如下命令编译这两个文件:

gcc -c test1.c
gcc -c test2.c

这样会生成两个object文件:test1.o和test2.o,再利用这两个文件来生成一个静态库文件,使用如下命令:

ar cr libtest.a test1.o test2.o

这样就生成了一个名为libtest.a的静态库文件。

再假设test1.c里面有一个函数叫做display,你的应用程序main.c可以调用这个display函数,编译的时候用如下命令:

gcc -o main main.c -L ./ -ltest

-L参数指明库的搜索路径,-l参数说明具体要链接的库。这样就可以像其他程序那样执行main可执行程序了。

2、动态库
动态库(shared library or dynamically linked library)和静态库主要有两个区别。第一个区别就是通过链接动态库编译程序时,所生成的目标代码中并不包含动态库中的代码,而只保存一个对动态库的引用信息;第二个区别就是动态库不仅仅是一些目标文件的集合,而是把几个目标文件合并成一个单独的文件,因此使用的时候不像静态库那样只链接所需要的目标文件,而是包含整个动态库文件。

同样,假设你有两个c文件:test1.c和test2.c,下面介绍如何把这两个文件编译成一个动态库文件。首先,编译test1.c和test2.c,使用如下命令:


gcc -c -fPIC test1.c gcc -c -fPIC test2.c

-fPIC命令告诉编译器test1.o和test2.o将作为动态库的一部分进行使用。PIC是指Position-Independent Code。然后将这两个目标文件组合起来,生成一个动态库文件,命令如下:

gcc -shared -fPIC -o libtest.so test1.o test2.o

这样就生成了一个名为libtest.so的动态库文件。和上面使用静态库一样的方法使用动态库,就不再介绍了。需要注意的是,执行动态链接的程序时,动态库文件所在的路径一定要包含在环境变量LD_LIBRARY_PATH当中,否则,找不到所使用的库文件时,程序不会成功执行。

阅读(1946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~