首页 > 系统相关 >Linux_动态库与静态库(其一)

Linux_动态库与静态库(其一)

时间:2024-10-02 23:22:38浏览次数:10  
标签:其一 静态 so 内存 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).节省内存空间资源

对比动态可执行程序与静态可执行程序所占内存的差异:

标签:其一,静态,so,内存,Linux,动态,可执行程序,加载
From: https://www.cnblogs.com/sunnyhengheng-cn/p/18445261

相关文章

  • Linux查看触摸坐标点的方法,触觉智能RK3562开发板,瑞芯微、全志等通用
    平时遇到键盘、鼠标、触摸板等输入设备无响应等异常情况时,一般通过更换设备判断异常。但在遇到更换正常设备后,输入仍然异常的情况下,可以借助evtest工具查看内核的上报事件信息,协助定位问题所在。本次使用的是触觉智能EVB3562开发板进行演示,搭载瑞芯微RK3562/RK3562J芯片,该方法也......
  • linux中进程的创建和终止
    进程的创建forkfork函数用来创建一个子进程子进程获得父进程的栈、数据段、堆和执行文本段的拷贝内存节约需要注意的是,执行文本段其实就是代码段,这个段是父子进程共享的,换句话说,虚拟的进程空间各自有一份,但是指向的物理空间共享一份还有,对于父进程数据段、堆段和栈段中的......
  • 【转戴】Redhat与Debian系介绍(Linux各种发行版本概述)
    Linux,最早由LinusBenedict Torvalds在1991年开始编写。在这之前,RichardStallman创建了FreeSoftwareFoundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为GPL:GeneralPublicLicense)。在不断的有杰出的程序员和开发者加入到GNU组织中后,便造就了......
  • Linux删除多余内核
    Linux删除多余内核使用aptdist-upgrade升级系统后,有时会更新新的内核。我们可以把旧的内核删掉来释放磁盘空间。查看当前的内核信息#查看当前正在使用的内核uname-a#查看系统当中的所有内核aptlist*linux*--installed#或ls/lib/modules|wc-l#有多少个内核......
  • 关于Arch Linux 安装及一些相关问题总结
    关于个人ArchLinux安装及相关问题总结关于为什么ssj不得不使用Linux,就其根本地,是因为巨硬的Windows更新炸掉了ssj的蓝牙,Playing的时候只能接入两个设备,难绷0.其它记得在pacstrap前换国内的源不会有人和我一样没换等半天还不成功吧......
  • linux系统相关概念与配置
    一.本地服务器:几个相关软件(一)vmware关键字:虚拟机(搭建虚拟环境)(二)MobaXterm关键字:连接(三)123445![](https://img2024.cnblogs.com/blog/3530901/202410/3530901-20241002141002999-137920567.jpg)![](https://img2024.cnblogs.com/blog/3530901/202410/3530901-20241002141037......
  • Arch Linux命令
    服务命令systemctlstartdoh-client.service#启动systemctlstatusdoh-client.service#查看状态systemctlrestartdoh-client.service#重新启动systemctlenable--nowdoh-client.service#允许开启启动systemctlis-enableddoh-client.service#查看是否开机时......
  • Linux 安装 docker-compose
    原文:linux安装docker-compose(官网教程)要在Linux上安装DockerCompose命令,可以按照以下步骤进行操作:下载DockerCompose的可执行文件。可以使用以下命令下载最新版本:sudocurl-L"https://github.com/docker/compose/releases/latest/download/docker-compose-$(un......
  • 静态QQ登录代码学习
    记录学习@搬砖界泰斗这只小狐狸的静态QQ登陆页面源码,了解静态登陆页面如何书写&&拓宽自己对css的理解Q1:用css调节子级元素位置时什么时候调节margin,什么时候调节padding?A1:margin对外,padding对内e.g.要实现一个这样的排版有一个大大盒子fafather,里面其中一个是大盒子father,再......
  • linux文件编程_进程
    1.进程相关概念面试中关于进程,应该会问的的几个问题:1.1.什么是程序,什么是进程,有什么区别?程序是静态的概念,比如:磁盘中生成的a.out文件,就叫做:程序进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程程序是静态的概念,进程是动态的概念简单的来说,没有......