linux下库文件的实现


一丶首先编辑测试文件。

main.c

 1 #include<stdio.h>
 2 #include"head.h"
 3 
 4 
 5 int main(int argc, char *argv[])
 6 {
 7          int a[10]={
 8                  -26,2,3,77,12,88,0,-8,99,100
 9          };
10          int i=0;
11          sort(a,10);
12          for(i=0;i<10;i++)
13          {
14                  printf("%d \n",a[i]);
15          }
16          return 0;
17 }

 sort.c

 1 void sort(int *a,int len)
 2 {
 3         int i=0;
 4         int j;
 5         int t;
 6         for(i=0;i<len;i++)
 7         {
 8                  for(j=0;j<len-i-1;j++)
 9                  {
10                          if(a[j]>a[j+1])
11                          {
12                                  t=a[j];
13                                  a[j]=a[j+1];
14                                  a[j+1]=t;
15                          }
16                  }
17         }
18 }

 head.h

1 #ifndef head_h
2 #define head_h
3 
4 
5 void sort(int *a,int len);
6 
7 #endif
8                                                          

 二丶我们在这里做一个附加的Makefile文件。(用Makefile编译)

Makefile

OBJ=main.o sort.o
main:$(OBJ) head.h
        gcc -o main $(OBJ)
main.o:main.c
sort.o:sort.c

.PHONY:cleaA clean
cleanA:
        rm main $(OBJ)
clean:
        rm $(OBJ)

 接下来执行指令:make

会有如下结果生成.o文件

cc    -c -o main.o main.c
cc    -c -o sort.o sort.c
gcc -o main main.o sort.o

执行结果为

 zhanghongle  ~  test  ./main
-26
-8
0
2
3
12
77
88
99
100

 执行命令:ls -l

可查看各个文件的大小

-rw-r--r-- 1 root        root         147 Mar 22 02:48 Makefile
-rw-r--r-- 1 root        root          67 Mar 22 02:32 head.h
drwxr-xr-x 1 root        root         512 Mar 22 02:59 libzhl
-rwxrwxrwx 1 zhanghongle zhanghongle 8416 Mar 22 05:17 main
-rw-r--r-- 1 root        root         215 Mar 22 02:36 main.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1824 Mar 22 05:17 main.o
-rw-r--r-- 1 root        root         196 Mar 22 02:32 sort.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1448 Mar 22 05:17 sort.o

三丶静态库的实现

首先生成静态库

执行指令:ar rcs libzhl.a sort.o

使用静态库编译

执行指令:gcc -o main main.c -static -L. -lzhl

执行命令:./main

 结果为

 zhanghongle  ~  test  cd libzhl
 zhanghongle  ~  test  libzhl  ls
head.h  libzhl.a  main  main.c
 zhanghongle  ~  test  libzhl  ./main
-26
-8
0
2
3
12
77
88
99
100

 同时重复执行:ls -l

文件大小一对比能明显反应静态库的特点

-rw-r--r-- 1 root root     67 Mar 22 02:58 head.h
-rw-r--r-- 1 root root   3482 Mar 22 02:58 libzhl.a
-rwxr-xr-x 1 root root 844792 Mar 22 02:59 main
-rw-r--r-- 1 root root    215 Mar 22 02:58 main.c

四丶动态库的实现

首先生成动态库

执行指令:gcc -shared -fPIC -o libzhl.so sort.o

使用静态库编译

执行指令:gcc -o main main.c -L. -lzhl(编译方式类似于静态库)

同样观察文件大小也能看出动态库的特点

-rw-r--r-- 1 root        root         147 Mar 22 02:48 Makefile
-rw-r--r-- 1 root        root          67 Mar 22 02:32 head.h
drwxr-xr-x 1 root        root         512 Mar 22 02:59 libzhl
-rwxrwxrwx 1 zhanghongle zhanghongle 7432 Mar 22 11:27 libzhl.so
-rwxrwxrwx 1 zhanghongle zhanghongle 8416 Mar 22 11:27 main
-rw-r--r-- 1 root        root         215 Mar 22 02:36 main.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1824 Mar 22 11:27 main.o
-rw-r--r-- 1 root        root         196 Mar 22 02:32 sort.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1448 Mar 22 11:27 sort.o

猜你喜欢

转载自www.cnblogs.com/hongle31/p/12544687.html