linux库的使用

本程序的功能主要是计算三个变量的和,最大值,最小值和平均值!

max.c

int max(int var1,int var2,int var3){
    int x;
     if(var1>var2){
     if(var1>var3) x=var1;
      }
      else {
      if(var2>var3) x=var2;
      else x=var3;
      }
      return x;
}

add.c

int add(int var1, int var2,int var3){
    return var1 + var2 + var3;
}

min.c

int min(int var1,int var2,int var3)
{            int y;
     if(var1<var2)
{     if(var1<var3) y=var1;
     }
     else {
     if(var2<var3) y=var2;
     else y=var3;
     }
     return y;
}

avg.c

int avg(int var1,int var2,int var3){
    return (var1+var2+var3)/3;

}

testcb.c

#include <stdio.h>
  
#include "cb.h"

int main(int argc, char **argv)
{
    int var1;
    int var2;
    int var3;
    printf("please input the var1: ");
    scanf("%d", &var1);
    printf("please input the var2: ");
    scanf("%d", &var2);
    printf("please input the var3: ");
    scanf("%d", &var3);
    printf("the add is %d\n", add(var1, var2,var3));
    printf("the max is %d\n", max(var1, var2,var3));
    printf("the min is %d\n", min(var1, var2,var3));
    printf("the avg is %d\n", avg(var1, var2,var3));
    return 0;
}

cb.h

#ifndef cb_h
#define cb_h

int add(int, int, int);
int max(int, int, int);
int min(int, int, int);
int avg(int, int, int);

#endif

下面是附加文件Makefile

OBJ=testcb.o add.o max.o min.o avg.o
testcb:$(OBJ) cb.h
        gcc -o testcb $(OBJ) 
testcb.o:testcb.c
add.o:add.c
max.o:max.c
min.o:min.c
avg.o:avg.c

.PHONY:cleanA clean
cleanA:
        rm testcb $(OBJ)                                                       
clean:
        rm $(OBJ)

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

dingxin@dingxin-VirtualBox:~/Study1$ ./a.out
please input the var1: 1
please input the var2: 2
please input the var3: 3
the add is 6
the max is 3
the min is 1
the avg is 2

通过make

dingxin@dingxin-VirtualBox:~/Study1$ make
cc    -c -o testcb.o testcb.c
cc    -c -o add.o add.c
cc    -c -o max.o max.c
cc    -c -o min.o min.c
cc    -c -o avg.o avg.c
gcc -o testcb testcb.o add.o max.o min.o avg.o 

查看文件大小

dingxin@dingxin-VirtualBox:~/Study1$ ls -l
总用量 72
-rw-r--r-- 1 dingxin dingxin  119 3月  22 18:06 add.c
-rw-r--r-- 1 dingxin dingxin 1240 3月  22 18:06 add.o
-rwxr-xr-x 1 dingxin dingxin 8640 3月  22 18:21 a.out
-rw-r--r-- 1 dingxin dingxin   71 3月  22 18:06 avg.c
-rw-r--r-- 1 dingxin dingxin 1264 3月  22 18:06 avg.o
-rw-r--r-- 1 dingxin dingxin  209 3月  22 18:05 cb.h
-rw-r--r-- 1 dingxin dingxin  265 3月  22 18:23 Makefile
-rw-r--r-- 1 dingxin dingxin  189 3月  22 17:39 max.c
-rw-r--r-- 1 dingxin dingxin 1280 3月  22 18:05 max.o
-rw-r--r-- 1 dingxin dingxin  189 3月  22 18:05 min.c
-rw-r--r-- 1 dingxin dingxin 1280 3月  22 18:05 min.o
-rwxr-xr-x 1 dingxin dingxin 8640 3月  22 18:22 testcb
-rw-r--r-- 1 dingxin dingxin  572 3月  22 18:08 testcb.c
-rw-r--r-- 1 dingxin dingxin 2720 3月  22 18:08 testcb.o

使用make cleanA清楚.o文件

dingxin@dingxin-VirtualBox:~/Study1$ make cleanA
rm testcb testcb.o add.o max.o min.o avg.o   

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

ar rcs libcb.a add.o max.o min.o avg.o

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

gcc -o testcb testcb.c -static -L. -l cb

查看文件大小

dingxin@dingxin-VirtualBox:~/Study1/libsamp$ ls -l
总用量 956
-rw-r--r-- 1 dingxin dingxin    209 3月  22 18:49 cb.h
-rw-r--r-- 1 dingxin dingxin   5408 3月  22 18:49 libcb.a
-rwxr-xr-x 1 dingxin dingxin 958488 3月  22 18:54 testcb
-rw-r--r-- 1 dingxin dingxin    572 3月  22 18:49 testcb.c

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

ar rcs libcb.so add.o max.o avg.o min.o

然后编译

gcc -shared -fPIC libcb.so add.o max.o min.o avg.o

继续

gcc -o testcb testcb.c -L. -lcb

查看文件大小

dingxin@dingxin-VirtualBox:~/Study1$ ls -l
总用量 88
-rw-r--r-- 1 dingxin dingxin  119 3月  22 18:06 add.c
-rw-r--r-- 1 dingxin dingxin 1240 3月  22 18:33 add.o
-rwxr-xr-x 1 dingxin dingxin 7608 3月  22 19:06 a.out
-rw-r--r-- 1 dingxin dingxin   71 3月  22 18:06 avg.c
-rw-r--r-- 1 dingxin dingxin 1264 3月  22 18:33 avg.o
-rw-r--r-- 1 dingxin dingxin  209 3月  22 18:05 cb.h
-rw-r--r-- 1 dingxin dingxin 5408 3月  22 18:40 libcb.a
-rw-r--r-- 1 dingxin dingxin 5408 3月  22 19:06 libcb.so
drwxr-xr-x 2 dingxin dingxin 4096 3月  22 19:05 libsamp
-rw-r--r-- 1 dingxin dingxin  265 3月  22 18:23 Makefile
-rw-r--r-- 1 dingxin dingxin  189 3月  22 17:39 max.c
-rw-r--r-- 1 dingxin dingxin 1280 3月  22 18:33 max.o
-rw-r--r-- 1 dingxin dingxin  189 3月  22 18:05 min.c
-rw-r--r-- 1 dingxin dingxin 1280 3月  22 18:33 min.o
-rwxr-xr-x 1 dingxin dingxin 8640 3月  22 19:07 testcb
-rw-r--r-- 1 dingxin dingxin  572 3月  22 18:08 testcb.c
-rw-r--r-- 1 dingxin dingxin 2720 3月  22 18:33 testcb.o

初次利用库,只能在老师后面亦步亦趋,很少有自己的创新点,希望以后能接触更多高深的知识充实自己

猜你喜欢

转载自www.cnblogs.com/Dreamer12135/p/12547840.html