静态库的创建和使用
1>.命名规则
lib+库的名字+.a
例子:libmytest.a
2>.制作步骤
a.生成对应的.o文件【.c --> .o】
b.将生成的.a文件打包
ar rcs + 静态库的名字【libmytest.a】 + 生成的所有的.o
3>.发布和使用静态库
a.发布静态库
b.头文件
include--存放头文件
lib--存放库
src--存放源码
演示:
include文件夹下面存放head.h【头文件】
#ifndef __HEAD_H_
#define __HEAD_H_
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
#endif
lib下面存放静态库
src下面存放源码
add.c
#include "head.h"
int add(int a, int b)
{
int result = a + b;
return result;
}
div.c
#include "head.h"
int div(int a, int b)
{
int result = a / b;
return result;
}
mul.c
#include "head.h"
int mul(int a, int b)
{
int result = a * b;
return result;
}
sub.c
#include "head.h"
int sub(int a, int b)
{
int result = a - b;
return result;
}
main.c是程序执行入口
#include <stdio.h> #include "head.h" int main(void) { int sum = add(2, 24); printf("sum = %d ", sum); return 0; }
步骤一:生成对应的.o文件【.c --> .o】
gcc *.c -c -I ../include
生成 add.o div.o mul.o sub.o四个二进制文件
默认生成.o文件
步骤二:将生成的.o文件打包成静态库.a文件
ar rcs libMyCalc.a *.o
将生成的 libMyCalc.a 文件移动到 lib文件夹下
mv libMyCalc.a ../lib
步骤三:发布静态库
方式一:
gcc main.c lib/libMyCalc.a -o sum -Iinclude
方式二:
gcc main.c -Iinclude -L lib -l MyCalc -o mysum
Iinclude 指定头文件
-L 指定静态库文件目录
-l 指定静态库文件名称【摘头去尾之后的名称:libMyCalc.a-->MyCalc】
-o 指定可执行文件名称
步骤四:使用静态库
./mysum
使用nm查看静态库和可执行文件
nm libmytest.a
nm mysum.out
静态库生成可执行文件详解:
libMyCalc.a静态库中包含add.o div.o mul.o sub.o四个二进制文件,如果main.c使用了add.o div.o里面的函数,生成可执行程序的时候只打包add.o div.o最终生成mysum这个可执行程序
静态库的优缺点
优点:1.发布程序的时候,不需要提供对应的库
2.加载库的速度快
缺点:1.库被打包到应用程序中,导致库的体积很大
2.库发生了改变,需要重新编译程序