linux下的程序如许多命令(ls 、echo、cd)要实现他们的功能,需要许多函数,在这些程序的源码中,这些函数的来源可以有两种,一种是自己编写,另一种是通过调用别人已经写好的函数,自己在编写程序的时候如果有别人已经写好的函数,直接调用这些函数会提高自己的工作效率,何乐而不为呢。
[
既然是我们要调用别人已经写好的函数,我们先要了解一下这些函数在哪里,如何调用它们了。linux中人们把预先编译好的函数集合起来,这些函数都是按照可重用的原则编写的,用来执行某项常见任务的,比如屏幕处理函数集合(curses集合),说专业点,人们把这样的函数集合叫函数库。标准的系统库文件一般都存储在/lib和/usr/lib目录中,你可以通过ls 命令查看到这些目录下有很多后缀为.so 或则.a的文件,这些文件就是为我们提供函数的。
linux 中的函数库分有两种:静态库和共享库。可以从库文件的后缀区分它们,后缀为.a的代表静态库,以.so为后缀的代表共享库。为了了解关于库,我们下面创建一个静态库,然后在程序中使用它。
一、静态库
1.建立一个fred.c的文件在里面我们写入如下代码:
[root@M2_test_192.168.8.93_61618_A code]# vim fred.c
#include <stdio.h>
void fred(int arg){
printf("fred:you passed %d \n",arg);
}
#include <stdio.h>
void fred(int arg){
printf("fred:you passed %d \n",arg);
}
2.再建立一个bill.c的文件,在里面也写入一些代码
[root@M2_test_192.168.8.93_61618_A code]# vim bill.c
#include <stdio.h>
void bill(char *arg){
printf("bill:you passed %s \n",arg);
}
#include <stdio.h>
void bill(char *arg){
printf("bill:you passed %s \n",arg);
}
然后分别编译这两个函数,产生要包含在库文件中的目标文件
[root@M2_test_192.168.8.93_61618_A code]# gcc -c bill.c fred.c
这里gcc通过-c选项来阻止编译器创建一个完整的程序,如果试图创建一个完整的程序将不会成功,因为我们还为定义main函数
下面我们开始编写一个调用bill函数的程序。首先,为我们的库文件创建一个头文件,这个头文件将声明我们的库文件中的函数,它应该被所希望使用我们库文件的应用程序所包含。
3.创建lib.h头文件: