使用 .a 静态库和 .so 动态库

本文详细介绍了如何使用vim编辑器创建子模块c文件,通过gcc编译为.o并链接生成静态库.a,以及后续将函数转换为动态库.so,并对比两者在文件大小上的差异。涉及的技术包括编译链接、静态与动态库的区别等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.先创建一个目录

mkdir test
cd test 

在这里插入图片描述
2.然后使用vim编辑器编辑生成sub1.c,sub2.c,main1.c
sub1.c代码

extern float x2x(int a,int b) 
{
return (float)a/b; //相除
}

sub2.c代码

extern float x2y(int a,int b) 
{
return (float)a*b; 
}

main1.c代码

#include "sub1.c"
#include "sub2.c"
#include <stdio.h>
int main() {
int x,y;
scanf("%d%d",&x,&y);
printf("%5f\n",x2x(x,y));
printf("%5f\n",x2y(x,y));
return 0; }

在这里插入图片描述

在这里插入图片描述

3.将 sub1.c、sub2.c 、main1.c编译成 .o文件

gcc -c sub1.c sub2.c main1.c

在这里插入图片描述
4.将x2x、x2y目标文件用 ar工具生成1个 .a 静态库文件

ar crv libafile.a sub1.o sub2.o

在这里插入图片描述
在这里插入图片描述

5.用 gcc将 main函数的目标文件与此静态库文件进行链接

gcc main1.c libafile.a -o main1

在这里插入图片描述

在这里插入图片描述
使用情况

6.记录文件的大小

size main1

在这里插入图片描述
7.将x2x、x2y目标文件用 ar工具生成1个 .so 动态库文件
生成目标文件(xxx.o)

gcc -c -fpic sub1.c sub2.c

o文件创建动态库

gcc -shared -fPIC -o libsub.so sub1.o sub2.o

在这里插入图片描述

8.使用动态库

gcc main1.c libsub.so -o main2
sudo mv libsub.so /usr/lib

在这里插入图片描述

9.记录大小

a904352517@ubuntu:~/test$ size main1
   text	   data	    bss	    dec	    hex	filename
   1986	    616	      8	   2610	    a32	main1
a904352517@ubuntu:~/test$ size main2
   text	   data	    bss	    dec	    hex	filename
   2317	    651      8	   2872	    b65	main2

大小对比

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值