一丶首先编辑测试文件。
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