一个比较简单的Linux下制作静态库的例子

2009年09月18日 17:44    发布者:f.luo
看书的时候发现个小例子,感觉不错。
分享一下,高手就不用来浪费时间了。
Linux下如何把自己写的函数做成静态编译库。
    这个例子中,我们创建了一个我们自己的小小的库,该库包含两个函数。而在例子中,我们使用了其中一个函数。这两个函数分别为fred和bill,作用为打印问候语。
    首先,为每一个函数各创建一个独立的源程序。建立两个C文件,分别为fred.c和bill.c简单看下面的代码。
第一个:
#include
void fred(int arg)
{
         printf(“fred: we passed %d\n”,arg);
}
第二个:
#include
void bill(char *arg)
{
      printf(“bill: we passed %s\n", arg);
}
现在可以编译这些函数。使用gcc的-c参数。编译:
$ gcc -c bill.c fred.c
$ ls *.o
bill.o      fred.o
头文件为了便于以后调用,编写个头文件,文件名为lib.h:/*
This is lib.h. It declares the functions fred and bill for users
*/
void bill(char *);
void fred(int);

好了,可以写主程序了.主程序调用函数bill()。
#include
#include “lib.h”
int main()
{
    bill(Hello World);
    exit(0);
}
用到的文件都完成了,下面主要是编译。

网友评论

f.luo 2009年09月18日
本帖最后由 f.luo 于 2009-9-18 18:12 编辑

现在可以进行进行编译和测试了

$ gcc -c program.c
$ gcc -o program program.o bill.o
$ ./program
bill: we passed Hello World
$

没有错误的话应该会输出

bill:wo passed Hello,World

现在创建和使用库函数

$ ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o

现在库函数创建成功,两个目标函数已经添加成功了
继续:

$ ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o

现在可以使用创建的库函数进行编译了
删掉原来的program二进制文件

$ gcc -o program program.o libfoo.a
$ ./program
bill: we passed Hello World
$

OK,不出错误的话应该成功了。:)
kendying 2009年09月22日
受教!