1. 先定义需要作为静态库函数的文件,并用 gcc -c 命令进行编译,-c 参数的作用是阻止编译器创建一个完整的程序。如:
创建两个文件: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 命令进行编译:
$ gcc -c bill.c fred.c
2. 新建一个头文件(lib.h),它用来声明库文件中的函数,如:
void bill(char *);
void fred(int);
3. 现在可以编译一个程序(program.c)来调用库中的函数,如:
#include <stdlib.h>
#include "lib.h"
int main()
{
bill("Hello World.");
exit(0);
}
4. 先编译program.c,再与之前编译好的目标模块bill.o链接:
$ gcc -c program.c
$ gcc -o program program.o bill.o
$ ./program
5. 到上面那步差不多就完成了一个简单库文件的创建与调用。现在我们要把若干个功能函数打包成一个文件,就像math.h 库文件将sin(), cos(), abs() 等函数都封装在一起一样。这样,只要调用一个总的库文件,就可实现多个功能。这里要用到ar命令,比如我们将上面的bill.o和fred.o库文件打包成一个libfoo.a 的库文件,命令是:
$ ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o
这样一来,上面第4步中第2条编译令命就可以是:
$ gcc -o program program.o libfoo.a
如果再编写一个调用fred.o的程序时,就只要链接libfoo.a这个库文件了,因为它里面已经封装了fred.o这个库文件的功能。
以上参考《Linux 程序设计》