[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函数头文件给使用者即可。链接库在编译程序时要放在被编译的源码文件之后,否则可能会链接失败。