(以下部分内容选自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);
main程序
#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
-o 表示输出可执行文件的名称
-L. 告诉编译器在当前路径下查找函数库,因为函数库并未保存在标准位置(/usr/lib)
-lfoo 告诉编译器使用名称为libfoo.a的函数库(或者名为libfoo.so的共享库,如果存在的话)
./main
执行结果如下:
jerry, you are beautiful!
Thank you!
好了,老汉只能帮你到这了!