Linux_动、静态库

目录

一、静态库

1、静态库的概念 

2、制作静态库的指令

3、制作静态库

4、链接静态库

二、动态库 

1、动态库的概念

2、制作动态库的指令 

3、制作动态库 

4、链接动态库

5、动态库的加载 

三、静态库与动态库的区别

结语


前言:

        在Linux下大部分程序进行编译时,都会接触静态库或动态库,因此动静态库在Linux下是个很重要的概念,他们都是文件,其中静态库后缀是.a,动态库后缀是.so。动静态库里保存的是函数的具体方法,他们的不同点在于链接阶段时,静态库会把方法直接拷贝到程序中,而动态库会把方法加载到内存中,并且在可执行程序中记录了动态库在内存的地址,以便在运行时能够让可执行程序从内存中定位具体方法。

一、静态库

1、静态库的概念 

         静态库是由.o文件打包而来的,因此库里面保存的是二进制,程序链接静态库时,会将静态库里的方法拷贝至可执行程序,所以使用静态库会导致可执行程序变大,则会占用内存和磁盘的空间,但是该可执行程序运行时不再需要链接外部的库,程序的独立性较强。

2、制作静态库的指令

        静态库的命名方式必须以lib为前缀,以.a为后缀,使用指令生成静态库:

ar -rc libxxx.a xxx.o
//将xxx.o文件打包成静态库

         这里.o文件可以是多个,即可以将多个.o文件打包成静态库,由于静态库存放的是函数方法,所以要先有一个.c源文件存放函数实现,以及有一个.h文件存放函数声明,代码如下:

//math.h
#pragma once
#include<stdio.h>

int Add1(int x,int y);


//math.c
#include"math.h"

int Add1(int x,int y)
{
    return x+y;
}

        并且在主函数中调用函数add:

//test.c
#include"math.h"

int main()
{
    int sum = Add1(5,3);
    printf("sum=%d\n",sum);
    return 0;
}

        先测试以上代码是否正确:

        从结果看以上代码的逻辑没问题。

3、制作静态库

        写一个makefile,便于完成静态库的制作,makefile的具体工作:生成math.c的.o文件,然后打包.o文件生成静态库文件,并且创建一个目录,将.h和.a文件打包到该目录下,这样直接将整个目录给到外部使用,.h文件主要是让用户知道该静态库有哪些方法可以被调用,类似说明书的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安权_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值