zoukankan      html  css  js  c++  java
  • 静态库的制作和使用

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

  • 相关阅读:
    JDBC数据库连接
    JDBC驱动程序类型
    JDBC简单示例代码
    JDBC SQL语法
    JDBC是什么?
    JDBC快速入门教程
    JUnit4参数化测试实例
    JUnit套件测试实例
    JUnit4时间(超时)测试实例
    JUnit4忽略(Ignore)测试实例
  • 原文地址:https://www.cnblogs.com/zheaven/p/14087012.html
Copyright © 2011-2022 走看看