打动态库和静态库

一.动态库和静态库的定义

1.静态库
    程序在编译链接时把库的代码链接到可执行文件中。程序运行时就不再需要静态库
2.动态库
    程序在运行的时候才去链接动态库的代码,多个程序 共享使用代码
3.动态链接
    在执行文件之前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程就叫做动态链接。其中动态库可以在多个程序间共享,使用动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程公用,节省了内存和磁盘空间。

二.如何生成一个静态库

    1.先来看一组代码

//add.c
#include<stdio.h>
#include"add.h"

int add(int a, int b)
{
    return a + b;
}
//add.h
#ifndef __ADD_H__
#define __ADD_H__

int add(int a ,int b);

#endif //__ADD_H__

#ifndef __ADD_H__
#define __ADD_H__

int add(int a ,int b);

#endif //__ADD_H__
//sub.c
#include<stdio.h>
#include"sub.h"

int sub(int a, int b)
{
    return a - b;
}
//sub.h
#ifndef __SUB_H__
#define __SUB_H__

int sub(int a ,int b);

#endif //__SUB_H__
//main.c
#include<stdio.h>
#include"add.h"
#include"sub.h"

int main()
{
    int a = 10;
    int b = 30;
    printf("add(%d, %d) = %d\n", a, b, add(a, b));
    printf("sub(%d, %d) = %d\n", a, b, sub(a, b));
    return 0;
}

    经过编译生成.o文件
        这里写图片描述
    通过ar(gnu)归档文具,rc表示代替和创建)生成静态库
                这里写图片描述
    其中ar后的-ty中t代表列出静态库的文件,v代表详细信息
    运行静态库:
这里写图片描述
    此时将静态库删掉,程序照样可以执行
这里写图片描述

    注意:-L选项是指定库的路径(这里是当前目录所在路径),-l是指定库名(这里是mymath),静态库是以.a结尾,在使用ar -rc 命令中应该注意以下几点

                这里写图片描述

三.如何生成一个静态库

    1.生成动态库
这里写图片描述
    2.运行动态库
这里写图片描述
    3.使用外部库

//test.c 文件
#include<stdio.h>
#include<math.h>

int main()
{
    double x = pow(2.0, 3.0);
    printf("The cubed is %f\n", x);
    return 0;
}

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值