【Linux】简单理解静态库(.a)和动态库(.so)

news/2024/10/22 0:57:06/

在程序运行的基础原理这篇文章中,最后的代码进行链接过程,我们提到了动态库和静态库的概念。那么什么是动态库和静态库呢?我们来简单理解一下

静态库和动态库

  • 1.静态库
    • 1.1 静态链接优点
    • 1.2 静态链接缺点
  • 2.动态库
    • 2.1 动态链接的优点
    • 2.2 动态链接缺点
  • 3.Linux默认是动态链接
  • 3.1 用ldd指令验证
  • 3.2 用file指令验证
  • 4.验证动态库和静态库占用空间差异
  • 5.总结

1.静态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中(这种链接方式也叫静态链接),因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

1.1 静态链接优点

静态链接成功,我们的程序可以不依赖任何库了,可以独立运行。

1.2 静态链接缺点

因为静态链接是把库中的代码全部拷贝到可执行文件中,所以比较浪费空间。

2.动态库

与静态库相反,动态库编译链接时,并没有把库文件中的代码加入到可执行文件中,而是在程序运行时链接文件加载库(拷贝动态库我所需要的代码的地址,通过这个地址就可以从动态库找到我所需要的内容),这样可以节省空间。其后缀名一般为(.so)

2.1 动态链接的优点

动态链接是可以做到被多个程序共享的,程序的内部只有地址,所以比较节省空间。

2.2 动态链接缺点

一旦我们的程序和动态库产生动态链接,那么我们的程序就依赖动态库,如果没有动态库我们的程序将无法正常运行。

3.Linux默认是动态链接

3.1 用ldd指令验证

ldd是list dynamic dependencies的缩写, 意思是, 列出动态库依赖关系。

对一个C语言可执行程序使用ldd指令
动态库的名字一般是 libxxx.so,后缀so表示我们的动态库,xxx是名称
可以看到,去掉前缀和后缀,这是一个c语言的库,而且是动态库。
在这里插入图片描述

3.2 用file指令验证

file指令可以辨识文件的类型

在这里插入图片描述

4.验证动态库和静态库占用空间差异

静态链接占的空间较大,动态库占的空间较小。
由于Linux是默认动态链接的,所以我们要验证静态链接的话,要强行转为静态链接的方式

在这里插入图片描述

在用-static时,可能会报错:
/usr/bin/ld: cannot find -lc错误
执行这行命令安装即可,sudo yum install glibc-static

顺便也可以用ldd指令和file指令看静态链接的可执行文件
在这里插入图片描述
不是动态的可执行程序

在这里插入图片描述

5.总结

链接有动态链接和静态链接,各有各自的优缺点。
Linux下默认为动态链接。
ldd指令和file指令可以查看一个可执行文件是动态链接还是静态链接


http://www.ppmy.cn/news/10263.html

相关文章

【操作系统】国科大《高级操作系统》思考题整理

参考用书:《Linux内核设计的艺术》 引言 国科大杨力祥《高级操作系统》思考题整理 思考题 为什么开始启动计算机的时候,执行的是BIOS代码而不是操作系统自身的代码?(P1,3) 加电的一瞬间,计算…

数组模拟实现单链表、双链表、栈、队列

文章目录 前引 一、数组模拟实现单链表 1、1 数组模拟的单链表解析 1、2 数组模拟实现单链表例题 二、数组模拟实现双链表 2、1 数组模拟实现双链表解析 2、2 数组模拟实现双链表例题 三、数组模拟实现栈 3、1 数组模拟实现栈解析 3、2 数组模拟实现栈例题 四、数组模拟实现队…

计算机基础——计算机分类

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本章将会讲解计算机分类应用领域以及发展趋势 一.计算机分类 计算机并非只有日常所…

Liunx服务器搭建SVN服务,并通过钩子实现代码自动部署

原文连接:https://www.rocschool.com/tutorial/rocschool-show-118.html 他这里面有好多坑,所以我整理了一分更详细的 我们来开始安装SVN服务器版本端,在宝塔里有SSH终端管理器,可以直接进行命令输入 安装SVN步骤 1、先要安装…

【vue2】常见指令的用法与示例

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:vue指令的声明与使用(v-text、v-html、v-on、v-bind、v-for、v-model、v-if、…

【寒假每日一题】AcWing 4653. 数位排序(补)

目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 关于pair 一、题目 1、原题链接 4653. 数位排序 - AcWing题库 2、题目描述 小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。 当…

app逆向 || xx合伙人登陆参数

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 本文适用于对安卓开发和Java有了解的同学 前言 本人最近一直在…

力扣(LeetCode)1658. 将 x 减到 0 的最小操作数(C++/Python)

题目描述 逆向思维滑动窗口 题目分析 : 从数组左侧和右侧,取出左侧的连续数字,右侧的连续数字,使得这些数字之和等于 x,维护最小取数次数,作为答案 。 设整个数组之和 total ,除去左侧和右侧的…