Linux C 中动静态库的区别与制作

如果把库比作是放在图书馆中的一本本书那么

动态库:只借阅,不卖出

静态库:直接卖出

动态库在源文件编译的时候并不会将代码数据拷贝进去,只会在程序运行的时候,链接完成一部分功能,当动态库从指定路径移除,程序无法正常运行,但好处在于使用动态库的程序体积较小。

静态库在源文件编译的时候直接将代码数据拷进一起编译,当程序运行的时候不再受静态库影响,静态库无论消失与否,程序依然正常运行,但代价就是程序体积较大。

动态库好处在于,更新方便,升级模块功能时候只要将对应库升级即可,而静态库需要将整个程序重新编译。

 

 

制作方法:

前置条件:

功能函数的相关.c文件,假设现有两个功能函数文件:

power.c

int power(int base,unsigned int pow)
{
	if(pow == 0)
		return 1;
	else if(pow == 1)
		return base;
	else
		return base*power(base,pow-1);
}

swap.c

int swapint(int *a,int*b)
{
	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *b ^ *a;
}

动态库制作方法:

(1)用gcc将power.c和swap.c两个文件编译成.o文件,注意加选项-fPIC

gcc power.c -o power.o -c -fPIC
gcc swap.c -o swap.o -c -fPIC

(2)将两个.o文件合成.so文件,注意库名称,假如名称叫yc,必须带前缀lib和后缀.so,即假如我想把新建库起名叫yc,我就要在制作时候填写完整名称libyc.so

gcc -fPIC -shared -o libyc.so swap.o power.o

(3)制作完成

 

静态库制作方法:

(1)用gcc将power.c和swap.c两个文件编译成.o文件

gcc swap.c -o swap.o -c
gcc power.c -o power.o -c 

(2)使用ar将两个.o文件合成.a文件,同样注意库名称,假如名称叫yc,必须带前缀lib和后缀.a,即假如我想把新建库起名叫yc,我就要在制作时候填写完整名称libyc.a

ar rcs libyc.a swap.o power.o

(3)制作完成

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值