[1]新建源程序staticlib.c
1 /************************************************************************* 2 > File Name: staticlib.c 3 > Author: copener 4 > Mail: hanmingye@foxmail.com 5 > Created Time: 2015年05月13日 星期三 17时08分11秒 6 ************************************************************************/ 7 8 /*sum*/ 9 int add(unsigned int a, unsigned int b){ 10 return (a+b); 11 } 12 13 /*sub*/ 14 int sub(unsigned int a, unsigned int b){ 15 return (a-b); 16 } 17 18 19 /*mul*/ 20 int mul(unsigned int a, unsigned int b){ 21 return (a*b); 22 } 23 24 /*div*/ 25 int div(unsigned int a, unsigned int b){ 26 return (a/b); 27 }
[2]编译但不链接源码staticlib.c 生成staticlib.o
1 oee@copener:~/workspace/test/staticlib$ ls 2 staticlib.c 3 oee@copener:~/workspace/test/staticlib$ gcc -c staticlib.c 4 oee@copener:~/workspace/test/staticlib$ ls 5 staticlib.c staticlib.o
[3]生成静态库文件staticlib.a
1 //注:r表示加入,若库不存在则用c参数创建,s表示把添加的内容更新到库文件 2 oee@copener:~/workspace/test/staticlib$ ar rcs staticlib.a staticlib.o 3 oee@copener:~/workspace/test/staticlib$ ls 4 staticlib.a staticlib.c staticlib.o
[4]添加staticlib.h的头文件引用
1 /************************************************************************* 2 > File Name: staticlib.h 3 > Author: copener 4 > Mail: hanmingye@foxmail.com 5 > Created Time: 2015年05月13日 星期三 17时10分42秒 6 ************************************************************************/ 7 8 extern int add(unsigned int a, unsigned int b); 9 extern int sub(unsigned int a, unsigned int b); 10 extern int mul(unsigned int a, unsigned int b); 11 extern int div(unsigned int a, unsigned int b);
[5]新建程序testapp.c调用静态库函数测试
1 /************************************************************************* 2 > File Name: testapp.c 3 > Author: copener 4 > Mail: hanmingye@foxmail.com 5 > Created Time: 2015年05月13日 星期三 17时15分47秒 6 ************************************************************************/ 7 8 #include<stdio.h> 9 #include"staticlib.h" /*包含库函数接口*/ 10 11 int main(void){ 12 unsigned int a,b; 13 printf("please input a and b:\r\n"); 14 scanf("%d%d",&a,&b); 15 16 printf("#########################################\r\n"); 17 printf("#add :%d\r\n",add(a,b)); 18 printf("#sub :%d\r\n",sub(a,b)); 19 printf("#mul :%d\r\n",mul(a,b)); 20 printf("#div :%d\r\n",div(a,b)); 21 printf("#########################################\r\n"); 22 23 return 0; 24 }
[6]编译测试源码链接静态staticlib.a,生成testapp可执行程序
1 oee@copener:~/workspace/test/staticlib$ gcc -c testapp.c -o testapp.o 2 oee@copener:~/workspace/test/staticlib$ ls 3 staticlib.a staticlib.c staticlib.h staticlib.o testapp.c testapp.o 4 oee@copener:~/workspace/test/staticlib$ gcc testapp.o ./staticlib.a -o testapp 5 oee@copener:~/workspace/test/staticlib$ ls 6 staticlib.a staticlib.c staticlib.h staticlib.o testapp testapp.c testapp.o
[7]测试运行testapp
1 oee@copener:~/workspace/test/staticlib$ ./testapp 2 please input a and b: 3 33 4 23 5 ######################################### 6 #add :56 7 #sub :10 8 #mul :759 9 #div :1 10 #########################################
[8]小结:库写好后,只要提供staticlib.a库和staticlib.h函数头文件给使用者即可。链接库在编译程序时要放在被编译的源码文件之后,否则可能会链接失败。