静态库的简单示例

本文将创建一个小型函数库,它包含两个函数,然后将在一个示例程序中调用其中一个函数。这两个函数分别是hello和goodbye,他们只打印简单的文本信息。

 

1、为两个函数分别创建各自的源文件(分别命名为hello.c和goodbye.c)

     (1) hello.c

#include <stdio.h>

void hello(int arg) {
  printf("Hello, %d\n", arg);
}

    (2) goodbye.c

#include <stdio.h>

void goodbye(char *arg) {
 printf("goodbye, %s\n", arg);
}

 

2、你可以分别编译这些函数来产生要包含在库文件中的目标文件。可以通过调用带有-c选项的C语言编译器来完成,-c选项的作用是阻止编译器创建一个完整的程序。如果此时试图创建一个完整的程序将不会成功,因为你还未定义main函数。

$ gcc -c hello.c goodbye.c

$ ls *.o
hello.o   goodbye.o

  

3、现在编写一个调用goodbye函数的程序。

首先,为你的库文件创建一个头文件。这个头文件将声明你的库文件中的函数,它应该被所有希望使用你的库文件的应用程序所包含。

 

    lib.h

void hello(int);
void goodbye(char *);

 

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

#include <stdlib.h>
#include "lib.h"

int main() {
 goodbye("Hello World");
 exit(0);
}

 

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

$ gcc -c program.c

$ gcc -o program program.o goodbye.o

$ ./program
goodbye, Hello World

 

6、现在,将创建并使用一个库文件。使用ar程序创建一个归档文件并将你的目标文件添加进去。这个程序之所以称为ar,是因为它将若干单独的文件归并到一个大的文件中以创建归档文件或集合。

$ ar crv lib.a hello.o goodbye.o
a - hello.o
a - goodbye.o

 

7、库文件创建好了,两个目标文件也已添加进去。在某些系统,尤其是从Berkeley Unix衍生的系统中,要想成功使用函数库,你还需要为函数库生成一个内容表,可以通过ranlib命令来完成。

$ ranlib lib.a

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

$ gcc -o program program.o lib.a

$ ./program
goodbye, Hello World

 

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