通过简单计算器功能实现静态库演示:
静态库c文件: static_lib.c
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
int mul(int a, int b){
return a * b;
}
int div(int a, int b){
return a / b;
}
静态库h头文件:static_lib.h
extern int add(int a, int b);
extern int sub(int a, int b);
extern int div(int a, int b);
extern int mul(int a, int b);
主要执行文件:main.c
include
include “static_lib.h”
int main(void){
int a, b;
printf(“please input a and b \n”);
scanf(“%d%d”,&a,&b);
printf(“the add: %d”,add(a,b));
printf(“the sub: %d”,sub(a,b));
printf(“the mul: %d”,mul(a,b));
printf(“the div: %d”,div(a,b));
return 0;
}
源码如上所示:
执行编译过程
第一步:编译static_lib.c的源文件,生成一个可重定向的目标文件。
gcc -c static_lib.c
执行完成之后,会多出一个 static_lib.o文件。
第二步:使用 ar 工具创建静态库
语法: ar rcs 静态库名 目标文件1 目标文件2 … 目标文件n
其中: r 把列表中的目标文件加入到静态库中
c 如果库不存在就创建库
s 更新静态库文件索引,使得其包含新加入目标文件的内容
具体执行语句:
ar rcs libstatic_lib.a static_lib.o
注意:静态库的库命名为:lib+静态库的名字。
注意:在最新的 ubuntu16的版本里面,可以省略那个lib文件。
也就是执行如下语句:
ar rcs static_lib.a static_lib.o
查看发现,多出一个 static_lib.a的文件。
第三步:使用静态库
首先是在目标文件main.c中加入static_lib.h的头文件,具体内容如上所示。
其次使用 gcc -L/ -l 来指定静态库。
-l(小写的L) 来指定静态库
-L 来指定库文件的搜索路径 如果使用“.” 代表搜索当前路径
其中 l 及 L 后直接带参数都不带空格。
例子:
gcc -L/home/Linux main.c -lstatic_lib -o app
或者
gcc -L. main.c -lstatic_lib -o app
注意,因为 -l是连接器选项。一定要放到被编译文件的后面。
本例子中因为在相同的目录下,所以本例子的语句是:
gcc -L. main.c -lstatic_lib -o app
或者本类也可以使用 static选择直接连接静态库使用
gcc main.c -static ./libstatic_lib.a -o app
这样也可以的。
第四步:执行生文件,结束