函数库可以分为静态函数库和动态函数库,对于linux,函数库主要存在/lib 和/usr/lib目录下,其中后缀名是'.a'的代表是静态函数库,后缀名是'.so'动态函数库,我们一般编译的时候默认是使用动态函数库的,如果想使用静态函数库需加上 static ,像这样:gcc -static main.c -o main,接下来介绍一下静态函数库和动态函数库的做法:
静态函数库的制作
1.编写库的源文件:
mylib.c 和 mylib.h
2.编写测试函数库的源文件:
tets.c
3.编译我们的库源文件,使它生成.o目标文件:
gcc -c mylib.c -o mylib.o
4.将目标文件生成静态函数库:
ar cqs libmylib.a mylib.o
( ar是生成库的命令,cqs是参数,libmylib.a是生成的静态链接库须以lib开头,mylib是库名,a表示是静态链接库)
5.将libmylib.a复制到/usr/lib下:
cp libmylib.a /usr/lib
6.测试我们所写的静态函数库:
- 编译运行测试函数:
gcc test.c -lmylib -o test
(-lmylib其中-l可以说是代表了动态链接库libmylib中的lib)
若发现是自己想要的结果,就说明静态库制作成功!附上自己的源码:
//mylib.c
int fuc(int m,int n)
{
int p = m - n;
if ( m <= 10 )
{
return p;
}
if ((m > 10)&&(m <= 20))
{
return 2*p;
}
if ((m > 20)&&( m <= 30) )
{
return 3*p;
}
}
//test.c
#include <stdio.h>
#incldue <mylib.h>
void main()
{
int count = 0;
count = fuc(30,15);
printf("count is : %d\n", count);
}
//mylib.h
int fuc(int m, int n);
动态函数库的制作
我们继续用做静态函数库的那个例子:
1.前几步和静态函数库制作的1~3步是一样的
gcc –c mylib.c –o mylib.o
2.生成目标文件之后,采用下面的命令
gcc -shared -fPIC mylib.o -o libmylib.so
(-shared是指明产生动态链接库, -fpic 使输出的对象模块是按照可重定位地址方式生成的,libmylib.so是生成的动态链接库须以lib开头,mylib是库名,so表示是动态链接库)
3.将制作好的libmylib.so 复制到/usr/lib
cp libmylib.so /usr/lib
4.测试我们所写的动态函数库
gcc test.c -lmylib -o test
(-lmylib其中-l可以说是代表了动态链接库libmylib中的lib)
源码和制作静态函数库的一样 >_<