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 --> 动态库和静态库
库的分类 根据链接时期的不同,库分为静态库和动态库之分. 静态库:在链接阶段被链接的,生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 动态库:在程序执行的时候被链接的,即使程 ...
随机推荐
- Superviso可视化监控进程
如果您需要同时运行多个 ThinkPHP 命令,可以在 Supervisor 中为每个命令创建一个单独的程序段.以下是示例配置,其中包含两个 ThinkPHP 命令:command1.php 和 co ...
- 【教程】运行所选代码生成器时出错:“无法解析依赖项。"EntityFramework 6.4.4" 与 ' EntityFramework.zh-Hans 6.2.0 约束:EntityFramework(=6.2.0)'不兼容。"
添加包含视图的控制器 执行以上添加"包含视图的MVC5控制器(使用Entity Framework)时报错 解决方案 在解决方案资源管理器中找到packages.config 注释掉Enti ...
- 【Project】原生JavaWeb工程 01 概述,搭建
一.环境准备: 操作系统:Windows7 或者 Windows10 IDE集成环境:IDEA 2018版本或者更高 数据库:MySQL 5版本或者更高 服务器:Tomcat 8版本或者更高 二.数据 ...
- 【BIOS】关于启用快速启动之后进不了BIOS的问题
这是我2013年的东芝SateLite M800的BIOS 作死开了快速启动 然后开启就跳过BIOS了 找贴吧看到的方法,先关机,然后按住访问BIOS的按键不要放 再启动,就会进BIOS了[老哥真牛]
- 网友开放的开源项目:网页版的A*算法可视化演示程序
相关项目: https://xueqiaoxu.me/#projects 项目介绍: A JavaScript path-finding library for grid based games. I ...
- MindSpore 初探, 使用LeNet训练minist数据集
如题所述,官网地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/quick_start.html 数据集下载: mkdir -p ./datasets/ ...
- win10系统wifi不会自动连接怎么解决
参考: https://jingyan.baidu.com/article/d621e8da743bab2865913f99.html ================================ ...
- 构建无服务器数仓(二)Apache DolphinScheduler 集成以及 LOB 粒度资源消费分析
引言 在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求.本系列博客从一个重视数据安全和合规性的 B2C 金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云 ...
- 如何将一个模块文件编译到Linux内核中?
很多粉丝在群里提问,如何把一个模块文件编译到内核中或者独立变异成ko文件.本文给大家详解讲解. 1. 内核目录 Linux内核源代码非常庞大,随着版本的发展不断增加.它使用目录树结构,并且使用Make ...
- C++技能树