1,linux中的库有两类:静态库和动态库
静态库就是在编译的时候进行链接的库,库的代码添加到要编译的模块中,后缀为:.a,相当于Windows中的.lib文件。
动态库是指在运行时候动态的链接的库,库的代码并没有添加到使用库的模块中。后缀是.so,相当于Windows中的.dll文件。
库通常的命名习惯是:以lib作为前缀,使用的时候有两种方式,一种编译的时候直接写文件全名,另一种方式是-l文件名(没有lib前缀和.a或者.so后缀),具体的使用方法见下边的说明。
2,静态库的创建和使用:
(1)创建方法:首先编写需要加入到库中的c文件:fun1.c和fun2.c,如下所示:
/fun1.c/
#define PI 3.14
double getPerimeter(double d) //根据直径计算圆的周长
{
double peri = PI * d;
return peri;
}
/fun2.c/
#define PI 3.14
double getArea(double d)
{
double area = PI * (d/2) * (d/2);
return area;
}
上边是创建了两个需要编译到库中的c源文件,下边使用命令,编译源文件,创建静态库。
编译命令:gcc -c fun1.c fun2.c ,默认的生成了fun1.o和fun2.o两个目标文件。
创建静态库: ar -cvq libfuncs.a fun1.o fun2.o 生成了libfuncs.a这个静态库文件
(2)静态库的使用,有两种方法
首先写好使用静态库的c源文件,如下所示:
/function.c/
#include<stdio.h>
//使用之前需要先声明
double getPrimeter(double d);
double getArea(double d);
int main()
{
double d = 12.4 ;
double primeter = getPrimeter(d);
double area = getPrimeter(d);
printf("the diameter is : %f , the primeter is %f , and the area is %f " , d, primeter , diameter);
}
下边需要编译代码,有两种方式:
A,gcc function.c <absolutepath>/libfuncs.a
B,gcc function.c -L<pathtothelibrary> -lfuncs
上边两种方编译命令的不同之处是,前一个相当与编译两个普通的文件,后一种是先使用-L确定库的目录,然后使用-l选项来链接库文件。
现在运行编译后的结果就可以看到打印出来的信息了:./a.out