首页 > 其他 > 详细

库的实现

时间:2020-03-21 21:21:26      阅读:48      评论:0      收藏:0      [点我收藏+]

程序的功能主要是计算最大值,最小值还有平均值,由于时间和能力有限,只能暂时输入三个数据!

一、不使用库

max.c

 1 int max(int var1,int var2,int var3){
 2     int x;
 3     if(var1>var2){
 4     if(var1>var3) x=var1;
 5     }
 6     else {
 7     if(var2>var3) x=var2;
 8     else x=var3;
 9     }
10     return x;
11 }

min.c

 1 int min(int var1,int var2,int var3){
 2     int y;
 3     if(var1<var2){
 4     if(var1<var3) y=var1;    
 5     }
 6     else {
 7     if(var2<var3) y=var2;
 8     else y=var3;
 9     }
10     return y;
11 }

avg.c

1 int avg(int var1,int var2,int var3){
2     return (var1+var2+var3)/3;
3 
4 }

testmi.c

 1 #include<stdio.h>
 2 
 3 #include "mi.h"
 4 
 5 int main(int argc, char **argv)
 6 {
 7     int var1;
 8     int var2;
 9     int var3;
10     printf("please input the var1: ");
11     scanf("%d", &var1);
12     printf("please input the var2: ");
13     scanf("%d", &var2);
14     printf("please input the var3: ");                                      
15     scanf("%d", &var3); 
16     printf("the max is %d\n", max(var1, var2,var3));
17     printf("the min is %d\n", min(var1, var2,var3));
18     printf("the avg is %d\n", avg(var1, var2,var3));
19 
20     return 0;
21 }

mi.h

1 #ifndef mi_h
2 #define mi_h
3                                                                             
4 int max(int, int,int);
5 int min(int, int,int);
6 int avg(int, int,int);
7 
8 #endif

以下是附加文件Makefile。

makefile

 1 OBJ=testmi.o max.o min.o avg.o
 2 testmi:$(OBJ) mi.h
 3     gcc -o testmi $(OBJ) 
 4 testmi.o:testmi.c
 5     max.o:max.c
 6 min.o:min.c
 7     avg.o:avg.c
 8 
 9 .PHONY:cleanA clean
10         cleanA:
11                 rm testmi $(OBJ)                                                       
12 clean:
13             rm $(OBJ)

通过   gcc *.c -o testmi 进行编译,./testmi 运行。结果如下

 crystalhf $ ~# ZYF # zyf #   ./testmi
please input the var1: 15
please input the var2: 20
please input the var3: 25
the max is 25
the min is 15
the avg is 20

通过make如下

make
crystalhf  ~  ZYF  zyf  1  make
cc    -c -o testmi.o testmi.c
cc    -c -o max.o max.c
cc    -c -o min.o min.c
cc    -c -o avg.o avg.c
gcc -o testmi testmi.o  max.o   min.o   avg.o

查看文件大小:

 crystalhf  ~  ZYF  zyf  1  ls -l
总用量 32
-rw-rw-rw- 1 crystalhf crystalhf   70 3月  21 19:43 avg.c
-rw-rw-rw- 1 crystalhf crystalhf 1264 3月  21 20:37 avg.o
-rw-rw-rw- 1 crystalhf crystalhf  242 3月  21 20:24 Makefile
-rw-rw-rw- 1 crystalhf crystalhf  149 3月  21 19:37 max.c
-rw-rw-rw- 1 crystalhf crystalhf 1280 3月  21 20:37 max.o
-rw-rw-rw- 1 crystalhf crystalhf  181 3月  21 19:31 mi.h
-rw-rw-rw- 1 crystalhf crystalhf  150 3月  21 19:37 min.c
-rw-rw-rw- 1 crystalhf crystalhf 1280 3月  21 20:37 min.o
-rwxrwxrwx 1 crystalhf crystalhf 8576 3月  21 20:37 testmi
-rw-rw-rw- 1 crystalhf crystalhf  481 3月  21 20:30 testmi.c
-rw-rw-rw- 1 crystalhf crystalhf 2560 3月  21 20:37 testmi.o

使用make cleanA清楚.o文件

 crystalhf  ~  ZYF  zyf  1  make cleanA
rm testmi testmi.o      max.o   min.o   avg.o                          

二、使用静态库文件,生成静态库。库文件以lib为前缀,我这里创建库名libwork1.a的库,使用命令ar,具体如下:

ar rcs libwork1.a max.o avg.o min.o

使用静态库,创建库文件的接口文件头文件,本文中是mi.h文件,使用库文件的文件testmi.c包含头文件mi.h文件即可,使用如下命令编译:

gcc -o testmi testmi.c -static -L. -lwork1

查看文件大小

 crystalhf  ~  ZYF  zyf  1  ls -l
总用量 984
-rw-rw-rw- 1 crystalhf crystalhf     70 3月  21 19:43 avg.c
-rw-rw-rw- 1 crystalhf crystalhf   1264 3月  21 20:37 avg.o
-rw-rw-rw- 1 crystalhf crystalhf   4100 3月  21 20:43 libwork1.a
-rw-rw-rw- 1 crystalhf crystalhf    242 3月  21 20:24 Makefile
-rw-rw-rw- 1 crystalhf crystalhf    149 3月  21 19:37 max.c
-rw-rw-rw- 1 crystalhf crystalhf   1280 3月  21 20:37 max.o
-rw-rw-rw- 1 crystalhf crystalhf    181 3月  21 19:31 mi.h
-rw-rw-rw- 1 crystalhf crystalhf    150 3月  21 19:37 min.c
-rw-rw-rw- 1 crystalhf crystalhf   1280 3月  21 20:37 min.o
-rwxrwxrwx 1 crystalhf crystalhf 958432 3月  21 20:45 testmi
-rw-rw-rw- 1 crystalhf crystalhf    481 3月  21 20:30 testmi.c
-rw-rw-rw- 1 crystalhf crystalhf   2560 3月  21 20:37 testmi.o

三、使用动态库文件:生成动态库文件。库文件一般以lib为前缀,紧接着是库的名称,扩展名为.so,我这里创建库名libwork1.so的库,具体如下:

ar rcs libwork1.so max.o avg.o min.o

接着使用

gcc -shared -fPIC libwork1.so max.o min.o avg.o

再使用

gcc -o testmi testmi.c -L. -lwork1

查看文件大小

 crystalhf  ~  ZYF  zyf  1  ls -l
总用量 60
-rwxrwxrwx 1 crystalhf crystalhf 7552 3月  21 20:54 a.out
-rw-rw-rw- 1 crystalhf crystalhf   70 3月  21 19:43 avg.c
-rw-rw-rw- 1 crystalhf crystalhf 1264 3月  21 20:37 avg.o
-rw-rw-rw- 1 crystalhf crystalhf 4100 3月  21 20:43 libwork1.a
-rw-rw-rw- 1 crystalhf crystalhf 2752 3月  21 20:53 libwork1.asomax.o
-rw-rw-rw- 1 crystalhf crystalhf 4100 3月  21 20:54 libwork1.so
-rw-rw-rw- 1 crystalhf crystalhf  242 3月  21 20:24 Makefile
-rw-rw-rw- 1 crystalhf crystalhf  149 3月  21 19:37 max.c
-rw-rw-rw- 1 crystalhf crystalhf 1280 3月  21 20:37 max.o
-rw-rw-rw- 1 crystalhf crystalhf  181 3月  21 19:31 mi.h
-rw-rw-rw- 1 crystalhf crystalhf  150 3月  21 19:37 min.c
-rw-rw-rw- 1 crystalhf crystalhf 1280 3月  21 20:37 min.o
-rwxrwxrwx 1 crystalhf crystalhf 8576 3月  21 20:55 testmi
-rw-rw-rw- 1 crystalhf crystalhf  481 3月  21 20:30 testmi.c
-rw-rw-rw- 1 crystalhf crystalhf 2560 3月  21 20:37 testmi.o

以上就是此次对库的实现,还有许多不足之处,希望以后能做得更好!

库的实现

原文:https://www.cnblogs.com/CrystalHzyf/p/12542195.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!