Linux操作系统关于动静态库的操作

一、动静态库的基本介绍

在Linux操作系统中静态库文件是以 .a 作为后缀的,动态库以 .so 作为后缀。

  • 静态库(.a):静态库的代码是在程序编译链接的时候就被链接到可执行文件当中的,在程序运行的时候就不需要静态库代码了。
  • 动态库(.so):动态库的代码是程序运行的时候才去链接的,多个程序可以共享使用动态库的代码。
  • 一个动态库链接的可执行文件只包含这个可执行文件用到的动态库内函数入口地址的一个表,而不是该函数所在目标文件的整个机器码。也就是说,当可执行文件用到动态库的某个函数时,链接到可执行文件当中的只有这些函数入口的地址,并没有这些函数的具体实现方法。
  • 动态链接是指在可执行文件运行之前,操作系统就会将该可执行文件运用到的动态库函数的具体实现代码从磁盘加载到内存里。
  • 静态链接是在可执行文件编译链接时就将静态库拷贝到可执行文件当中。
  • 动静态库的命名方式为 lib + 库名 + 后缀 ,例如libxxx.a表示静态库,libxxx.so表示动态库。

二、静态库

1.生成静态库

在写C++的STL模拟实现的时候,我们经常会定义三个文件,一个(.h)头文件用来放类和函数的声明,一个(.cpp)源文件来放函数的定义,一个(.cpp)文件来写main函数做测试或者使用类。我们可以举一个简单的例子来看一下平时我们是怎么做的。

创建mymath.h头文件用来声明addToVal函数:

在这里插入图片描述


创建mymath.c文件用来写addToVal函数的具体实现方法:

在这里插入图片描述


创建test.c文件写main函数,测试addToVal函数:

在这里插入图片描述


然后我们创建makefile文件,平常我们就是用这种方式来生成可执行文件的:

在这里插入图片描述

在这里插入图片描述

我们现在不想像以前那样生成可执行文件了,我们想要把头文件和源文件打包成一个静态库,我们在原有的mymath.h头文件和mymath.c源文件基础上,再增加myprint.h和myprint.c文件,把这四个文件打包成一个静态库。
首先我们要将(.c)源文件变成 .o 文件,输入指令gcc -c mymath.cgcc -c myprint.c,生成了对应的 .o 文件。

在这里插入图片描述

链接就是将所有的 .o 文件链接形成一个可执行程序。如果我们不打包,直接将所有的 .o 文件给别人,别人也可以用来生成可执行程序,例如࿱

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JJP1124

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

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

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

打赏作者

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

抵扣说明:

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

余额充值