Linux下模块化编程生成函数库和编译方法

一、首先,为两个函数分别创建各自的源文件(将他们分别命名为fred.c和bill.c).下面第一个源文件:

#include "stdio.h"

void fred(int arg)

{

printf("fred: we passed %d\n",arg);

}

下面是第二个源文件:

#include "stdio.h"

void bill(char *arg)

{

printf("bill:we passed %s\n",arg);

}

二、分别编译这些函数以产生要包含在库文件中的目标文件。

$ gcc -c bill.c fred.c

三、现在编写一个调用bill函数的程序。首先为你的库文件创建一个头文件。这个头文件将声明你的库文件中的函数,他应该被希望所有希望使用你的库文件的应用程序所包含。

/*This is lib.h It declares the functions fred and bill for users */

void bill(char *);

void fred(int);

四、调用程序(program.c)非常简单,它包含库的头文件并且调用库中的一个函数。

#include "lib.h"

int main()

{

bill("hello world");

exit(0);

}

五、现在你可以编译并测试这个程序了。你暂时为编译器显示指定目标文件,然后要求编译器编译你的文件并将其与先前编译好的目标模块bill.o链接。

$ gcc -c program.c

$ gcc -o program program.o bill.o

$ ./program

bill : we passed hello word

$

六、现在,你将创建并使用一个库文件。使用ar 程序创建一个归档文件并将你的目标文件添加进去。

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

a - bill.o 

a - fred.o

七、库文件创建好了,两个目标文件都添加进去了,要想成功使用函数库,你还需要为函数库生成一个内容表。可以用ranlib 命令来完成这一工作。

$ ranlib libfoo.a

这个函数库就可以使用了,你可以在编译器使用的文件列表中添加该库文件以创建你的程序

$ gcc -o program  program.o libfoo.a

./proram

bill : we passed hello world 

$

你也可以使用-l选项来访问函数库,但其未保存在标准位置,所以必须使用-L选项来告诉编译器在何处可以找到他,

$ gcc -o program program.o -L. -lfoo


你可能感兴趣的:(Linux应用程序)