您的位置:首页 > 运维架构 > Linux

静态函数库和动态函数库的制作

2016-04-10 14:33 489 查看
函数库可以分为静态函数库和动态函数库,对于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)

源码和制作静态函数库的一样 >_<

———————-END——————————

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 linux gcc