程序的功能主要是计算最大值,最小值还有平均值,由于时间和能力有限,只能暂时输入三个数据!
一、不使用库
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