搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
盐析白兔
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
RabbitMQ的高可用机制
2
python里np什么意思_python np是什么意思
3
开源数据备份工具 Duplicati
4
mac下切换到root用户
5
skimage图像处理(全)
6
使用git将项目上传到github(最简单方法)_git项目上传github
7
基于大模型(LLM)相互协商的情感分析_llm gpt 评论情感分析
8
QNX共享内存和线程锁实现进程锁
9
解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (6)_single scale network
10
大模型时代:普通人如何把握科技浪潮中的获利机会?
当前位置:
article
> 正文
linux下静态库和动态库的区别_linux动态库和静态库的区别
作者:盐析白兔 | 2024-08-13 20:14:26
赞
踩
linux动态库和静态库的区别
一、引言
我们通常把一些公用函数制作成函数库,供其它程序使用。
函数库分为静态库和动态库两种。
通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到相应目录下下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形式。
其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime)。这就是动态链接库(dynamic link library)技术。
二、两者区别:
a,静态库的使用需要:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码
b,动态库的使用:
程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库
c,依赖性:
静态链接表示静态性,在编译链接之后, lib库中需要的资源已经在可执行程序中了, 也就是静态存在,没有依赖性了
动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供 需要的 动态库,有依赖性, 运行时候没有找到库就不能运行了
d,区别:
简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
链接静态库,编译的可执行文件比较大,当然可以用strip命令精简一下(如:strip libtest.a),但还是要比链接动态库的可执行文件大。程序运行时间速度稍微快一点。
静态库是程序运行的时候已经调入内存,不管有没有调用,都会在内存里头。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
其在编译程序时若链接,程序运行时会在系统指定的路径下搜索,然后导入内存,程序一般执行时间稍微长一点,但编译的可执行文件比较小;动态库是程序运行的时候需要调用的时候才装入内存,不需要的时候是不会装入内存的。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
三、动态链接库的特点与优势
首先让我们来看一下,把库函数推迟到程序运行时期载入的好处:
1. 可以实现进程之间的资源共享。
什么概念呢?就是说,某个程序的在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库就是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段。
2. 将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。Windows 就是一个很好的例子。
3. 甚至可以真正坐到链接载入完全由程序员在程序代码中控制。
程序员在编写程序的时候,可以明确的指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源。比如现在的软件通常都能打开若干种不同类型的文件,这些读写操作通常都用动态链接库来实现。在一次运行当中,一般只有一种类型的文件将会被打开。所以直到程序知道文件的类型以后再载入相应的读写函数,而不是一开始就将所有的读写函数都载入,然后才发觉在整个程序中根本没有用到它们。
静态库:在编译的时候加载生成目标文件,在运行时不用加载库,在运行时对库没有依赖性。
动态库:在目标文件运行时加载,手动加载,且对库有依赖性。
具体在开发中用到哪种库,我觉得还是根据实际的内存大小,ROM大小,运行的速度等综合考虑。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/盐析白兔/article/detail/976360
推荐阅读
article
linux
--
gitblit
安装_
linux
安装
gitblit
...
linux
--
gitblit
安装
linux
搭建git服务器1、
linux
服务器搭建git服务器:yum install...
赞
踩
article
openssl
配置
linux
,
openssl
安装配置...
安装
openssl
# tar –zxvf
openssl
# cd
openssl
# ./config --prefix=...
赞
踩
article
【
Linux
】
make
/
Makefile
——项目
自动化
构建
工具
...
详细讲解了linux中项目
自动化
构建
工具
make
/
Makefile
的原理和使用【
Linux
】
make
/Makefi...
赞
踩
article
linux
简单
重定向
代码
,
Linux
Shell
编程
(26)——
代码
块
重定向
...
像 while, until, 和 for 循环
代码
块, 甚至 if/then 测试结构的
代码
块都能做到标准输入的
重定向
...
赞
踩
article
Linux
&
Shell
编程基础——
构建
基本
脚本
...
Shell
脚本
是一种强大的自动化工具,允许用户将多个命令组织在一起,处理命令输出,并通过文本消息向用户反馈
脚本
的执行情况...
赞
踩
article
Linux
&
Shell
编程基础——
构建
基本
脚本
_
shell
语言
和
liunx
脚本
...
在创建
shell
脚本
文件时,必须在文件的第一行指定要使用的
shell
。①
构建
一个
脚本
文件执行创建新用户、给新用户分组、查...
赞
踩
article
【
Linux
】利用
消息
队列
实现
一个
简单的
进程
间
双向通信
(两种方式)_
进程
间通信
选择
一个
队列
还是两个队...
在实现利用
消息
队列
的
进程
间通信
之前,先了解一下基本的概念和所需要用到的函数。
消息
队列
消息
队列
是
Linux
内核地址空间中的...
赞
踩
article
Linux
——
进程
概念详解_
linux
中
kp
进程
用法
讲解
...
文章详细介绍了
进程
的概念,PCB(
进程
控制块)的作用,以及操作系统如何通过PCB管理
进程
。在Windows和
Linux
系...
赞
踩
article
Linux
:进程
信号
(一.认识
信号
、
信号
的
产生
及深层理解、
Term
与
Core
)_
term
linux
...
1.认识
信号
进程看待
信号
方式2.
信号
的
产生
2.1
信号
的处理的方式 --- signal()函数2.2kil指令
产生
信号
2...
赞
踩
article
【
linux
】
进程
信号
——
信号
的
产生
_
进程
接收
到
信号
...
信号
的
产生
_
进程
接收
到
信号
进程
接收
到
信号
进程
信号
一...
赞
踩
article
Linux
下
Clang
-
format
代码
格式化_
clang
-
format
linux...
本文介绍了如何在
Linux
环境下使用
Clang
-
format
工具来统一
代码
格式,包括安装、基本使用方法以及如何自定义
代码
...
赞
踩
article
Linux
、麒麟
系统
挂载
硬盘、挂在
Windows
硬盘,不使用格式化直接
挂载
_麒麟
系统
挂载
window...
Linux
、麒麟
系统
挂载
硬盘、挂在
Windows
硬盘_麒麟
系统
挂载
windows
硬盘麒麟
系统
挂载
windows
硬盘 ...
赞
踩
article
[MAC
苹果电脑
] [
Linux
系统
] ”
苹果电脑
使用
虚拟机
安装
Linux
Ubuntu
系统
”...
一.前述 研究员买了MAC
苹果电脑
后,大多想到的一件事:能不能再装一个
Linux
系统
。 MAC的强大办公能力+ L...
赞
踩
article
utm
虚拟机
安装
linux
,
UTM
: 在
iOS
上
安装
Windows
或 Linux 等系统及虚...
Apps& Tweaks|Jailbreak Guide|iDevices
UTM
Version: 2.0.20Repo:...
赞
踩
article
mac
kali
lin
u
x
u
盘安装教程,由
MAC
,制作
Kali
Lin
u
x 启动盘(支持持久化)...
准备工具:1.
MAC
电脑(使用的
MAC
已经是windows 和
mac
的 双系统了 所以启动的时候是BOOTCA...
赞
踩
article
提升您的安全
专业知识
:在 Mac 上
安装
Kali
Linux
的终极指南_wsl
kali
-lin...
本文提供了在
mac
OS上通过VMware Fusion
安装
Kali
Linux
的详细步骤,包括从Broadcom网站获取...
赞
踩
article
【
Kali
System】Mac 下制作
kali
Linux Live USB_
kali
lin...
考虑到本人是一个爱折腾的人,玩技术嘛,没办法,以前一直在Windows系统上用一些很是“自动化的”,比如UltraISO...
赞
踩
article
kali
linux
破解
WiFi
密码
(仅供学习使用)_
kali
linux
wifi
密码
...
kali
linux
破解
WiFi
密码
(仅供学习使用)(严禁商业使用,只能用于个人学习使用)一、安装
kali
linux
这部分...
赞
踩
article
Kali
Linux 连接无线_
kali
available
networks
空...
kali
虚拟机安装完毕后,尽管可以使用桥接方式或者共享网络方式进行上网,但类型为有线连接,如果想使用无线需使用无线网卡。...
赞
踩
article
kail
linux
配置
无线
网络,
Kali
Linux
无线
渗透测试入门指南 第一章
配置
无线
环境...
本文是
Kali
Linux
无线
渗透测试入门指南的第一章,主要介绍如何
配置
无线
环境,包括硬件和软件需求。内容涉及安装Kal...
赞
踩
相关标签
git
openssl 配置 linux
linux
自动化
运维
linux简单重定向代码
服务器
消息队列
LINUX
进程通信
c语言
java
数据库
c++
安全