Linux_动态库与静态库(其一)
1.动态库和静态库的定义
动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在程序运行的时候才去链接动态库的代码,可以被多个程序共享使用,通常以 .so 结尾。
静态库(.a):静态库是将一组目标文件(.o文件)打包成一个单一的归档文件。在编译时,链接器会将所需的目标文件代码复制到最终生成的可执行文件中,程序运行的时候将不再需要静态库,通常以.a结尾。
库的命名规则:
lib+库名+后缀(.s/.so等)
eg:libc.so的库名为c,其表示c语言动态库

eg:libc.a的库名为c,其表示c语言静态库

2.动静态程序的运行过程:

静态可执行程序
加载:因为可执行程序包含头文件所有方法和main函数,所以加载到内存比较大。
在内存的程序代码通过页表对应进程地址空间的正文代码段
如果其他进程也需要使用C库,内存中没有加载C库,C库在静态可执行程序中,所以其他进程还要重新加载C库,浪费了内存空间
动态可执行程序
加载:除了代码加载到内存,其所使用的方法也会被加到内存。所以加载比较小
内存中的代码映射到进程地址空间的正文代码段,所使用的方法映射到栈和堆区之间的共享区
如果其他进程也需要使用C库,则只要调整其他进程的映射关系到已经在内存加载好的C库即可,
不需要重复加载,节省内存空间
3.查看可执行程序依赖的动态库(ldd)

ldd主要用于查看动态库的依赖关系,而静态库在编译时会被直接链接到可执行文件中,因此通常不会显示依赖。

4.静态库与动态库的优缺点
静态库
缺点:
1).加载到内存时所占空间大
2).多个进程使用同一库会导致内存资源浪费
优点:
1).与库无关,库已经链接在可执行程序中,删除库后仍可运行
2).程序不依赖于库,跨平台性更强
动态库
缺点:
1).依赖库,如果可执行程序生成后,删除库则无法运行这个可执行程序
优点:
1).节省内存空间资源
对比动态可执行程序与静态可执行程序所占内存的差异:

Linux_动态库与静态库(其一)的更多相关文章
- 【转】iOS动态库和静态库的简要介绍
静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- Linux系统中“动态库”和“静态库”那点事儿【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...
- libjpeg 交叉编译动态库和静态库
1.下载libjpeg库,解压之 得到了jpeg6b和libtool-2.2.4两个文件夹. 2.编译安装libtool工具. 这是配置libtool,这里需要注意:configure 参 ...
- VS2008 动态库和静态库的生成和加载
第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\V ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- Linux系统中“动态库”和“静态库”那点事儿
摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...
- linux --> 动态库和静态库
库的分类 根据链接时期的不同,库分为静态库和动态库之分. 静态库:在链接阶段被链接的,生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 动态库:在程序执行的时候被链接的,即使程 ...
随机推荐
- 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文介绍Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书,如需要了解Halo 2的安装,参考如何在Linux云服务器上通过Docker Compose部署安装Halo, ...
- 在Python中使用sqlalchemy来操作数据库的几个小总结
在探索使用 FastAPI, SQLAlchemy, Pydantic,Redis, JWT 构建的项目的时候,其中数据库访问采用SQLAlchemy,并采用异步方式.数据库操作和控制器操作,采用基类 ...
- 【SpringMVC】10 对Ajax的应用
编写一个AjaxController package cn.dai.controller; import org.springframework.web.bind.annotation.GetMapp ...
- 【ECharts】01 快速上手
简单介绍: ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求. ECharts 遵循 Apache-2.0 开源协议,免费商用. ECharts 兼容 ...
- 【转载】英特尔CEO:如果美出口管制太严,中国就必须生产自己的芯片
原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9816136 ...
- 【转载】Ubuntu20.04安装Bazel
原文地址: https://zhuanlan.zhihu.com/p/311406177 ====================================== sudo apt install ...
- Hutool常用工具类
1.背景 实际开发中经常用到很多的工具类,这里hutool提供了一系列的工具类,下面重点介绍常用的工具类. 2.使用步骤 官方文档:https://hutool.cn/docs/#/ 添加依赖 < ...
- MySQL8服务无法启动,服务没有报告任何错误
MySQL8服务无法启动,服务没有报告任何错误 错误信息: 免安装版mysql-8.0.15-winx64.zip 按照教程来安装,解压,增加my.ini文件,修改文件内部的地址信息,配置环境变量pa ...
- Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客)
三年前,我们开源了 Quickwit,一个面向大规模数据集的分布式搜索引擎.我们的目标很宏大:创建一种全新的全文搜索引擎,其成本效率比 Elasticsearch 高十倍,配置和管理显著更简单,并且能 ...
- .NET8 Blazor 从入门到精通:(二)组件
目录 Blazor 组件 基础 路由 参数 组件参数 路由参数 生命周期事件 状态更改 组件事件 Blazor 组件 基础 新建一个项目命名为 MyComponents ,项目模板的交互类型选 Aut ...