(以下部分内容选自Beginning Linux Programing)
静态库也称作归档文件(archive),通常以.a结尾。我们采用ar(代表archive)程序和gcc -c(-c是为了阻止编译器创建一个完整的程序,后边我会细说)命令对函数分别进行编译。应该尽可能的把函数分别保存到不同的源文件中。
下面我们来创建一个小型的函数库,包含两个函数,然后在一个示例程序中调用这两个函数
boy.c
#include<stdio.h> void boy(char* arg) { printf("%s, you are beautiful! \n", arg); }girl.c
#include<stdio.h> void girl(void) { printf("Thank you! \n"); }
分别编译这些函数,产生目标文件。这些目标文件将包含在库文件中。
此时编译需要加上-c选项,阻止编译器创建一个完整的程序,如果此时试图创建一个完整的程序将不会成功,因为我们还没定义main函数
gcc -c boy.c girl.c
现在要为我们的库文件创建一个头文件,在这个头文件中,我们声明库文件中的函数
void boy(char *); void girl(void);
#include<stdio.h> #include "lib.h" int main() { boy("jerry");//双引号中的内容可以随意指定 girl(); return 0; }
$ ar crv libfoo.a boy.o girl.o a - boy.o a - girl.o我们采用ar程序创建一个归档文件,并将目标文件添加进去。
键入第一行的命令后,会有两行输出,表示已经将这两个目标文件归档到文件libfoo.a中
运行之前,我们要编译产生可执行文件
gcc -o main main.c -L. -lfoo
-L. 告诉编译器在当前路径下查找函数库,因为函数库并未保存在标准位置(/usr/lib)
-lfoo 告诉编译器使用名称为libfoo.a的函数库(或者名为libfoo.so的共享库,如果存在的话)
./main
执行结果如下:
jerry, you are beautiful! Thank you!