静态库

(以下部分内容选自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! 

好了,老汉只能帮你到这了!


你可能感兴趣的:(静态库)