静态库的制作和使用

静态库的创建和使用
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.库发生了改变,需要重新编译程序

原文地址:https://www.cnblogs.com/zheaven/p/14087012.html