Linux下创建和维护自己的静态库

 静态库文件以.a表示其类型,并且静态库文件都是lib***.a的形式。程序在链接的时候会将静态库调入,然后生成可执行文件。此后即使删除可执行文件也不会影响程序的正常执行。静态库的缺点是,当你同时运行许多应用程序并且他们都使用来自同一个函数库的函数时,内存中就会有统一个函数的多分副本,而且在程序文件自身中也有多份同样的副本,这将消耗大量内存和磁盘空间。

静态库的生成过程过程示例(本例中,将创建一个小型函数库,包含两个函数,然后在一个示例程序中调用其中一个函数:

(1) 创建两个函数tom与jack以及所在的源文件tom.c与jack.c。

//tom.c
#include <stdio.h>
void tom(char *arg)
{
	printf("tom said:%s\n", arg);
}
//jack.c
#include <stdio.h>
void jack(char *arg)
{
	printf("jack said:%s\n", arg);
}
(2)编译这两个源文件生成对应的目标文件
$gcc -c tom.c jack.c
$ls *.o
结果显示生成的对应目标文件tom.o与jack.o
(3)为我们的库文件创建一个头文件,可以命名为tomjack.h,头文件需要声明库文件的函数。
//tomjack.h
void tom(char *arg);
void jack(char *arg);
(4)编写调用程序prog.c,程序调用tom()函数
//prog.c
#include <stdlib.h>
#include "tomjack.h"
int main()
{
	jack("Hello baby!\n");
	return 0;
}

测试,为编译器显式指定目标文件,然后要求编译器编译文件并将与先前编译好的目标模块jack.o链接
$gcc -c prog.c
$gcc -o prog prog.o jack.o
$./prog
结果打印:jack said:Hello baby!
(5)现在,创建并使用一个库文件。使用ar程序创建一个归档文件,并将目标文件添加进去。
$ar crv libfoo.a jack.o tom.o
c create的意思
r replace的意思
重新链接生成可执行文件
$rm prog
$gcc -o prog prog.o libfoo.a
$./prog
结果打印:jack said:Hello baby!
也可以使用-l访问函数库,但因其未保存在标准位置,所以必须使用-L选项来告诉编译器在何处可以找到它,如下所示:
$rm prog
$gcc -o prog prog.o -L. -lfoo
$./prog
结果打印:jack said:Hello baby!
此刻,自己的静态库文件libfoo.a已经生成了,如果需要长期使用,可以mov  ./libfoo.a  /usr/lib/,以后使用的时候就不用再指定其所以位置了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值