当前位置: 首页 > news >正文

链接 -- 动静态链接 --特点、区别、静态库安装下载

1.链接是什么?

我们的程序,和 库(语言一定会有自己的标准库) 结合的过程就叫做链接。

2.为什么有链接?

让开发站在巨人的肩膀,提高开发效率。

c语言库:

ls /user/include/

动静态库的特点与区别:

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


动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc test.o –o test.c


gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证

Linux:

动态库: .so

静态库: .a

Windows:

动态库:.dll

静态库: .lib


共享动态库:一旦动态库缺失,程序中所有动态链接的程序,都无法执行

静态链接的应用场景:

在编译的时候,把库中的方法,拷贝到我自己的可执行程序中,不用在关心库的缺失。所以注定静态链接形成的可执行程序不依赖任何库,因此当所编译程序 centos 8 ...具有非常强的跨平台性,可静态链接,在各种平台都可以跑。

静态库的安装:(默认情况下,linux上,静态库是默认没有安装的)

这个命令是在Linux系统中使用yum包管理器安装静态版本的glibc和libstdc++库。-y标志表示自动回答"是"以接受所有的问题。

sudo yum install -y glibc-static libstdc++-static

文件大小的区别

当我们制作可执行的文件(你可以随便使用一个正确的c语言代码来测试):

静态:

gcc test.c -o mytest-static -static

动态:

gcc test.c -o mytest

最后我们可以明显观察到两者文件大小的区别


http://www.mrgr.cn/news/10389.html

相关文章:

  • PyTorch踩坑记录1
  • 谷粒商城实战笔记-239-商城业务-购物车-ThreadLocal用户身份鉴别
  • 使用CORS解决跨域问题
  • springboot社区帮扶对象管理系统论文源码调试讲解
  • 如何了解SSL证书链情况?
  • Mybatis-plus 创建自定义 FreeMarker 模板详细教程
  • 【日常记录-Java】SpringBoot将文件上传到另外一个服务
  • 以简单的例子从头开始建spring boot web多模块项目(二)-mybatis简单集成
  • 010、架构_配置文件_管理节点(clustermanager.ini)
  • Nginx源码安装与进阶负载均衡
  • RK3588开发笔记-pdm接口ES7201音频采集调试记录
  • pygame—炸弹牌(可做课设)
  • 在Ubuntu 18.04上安装Linux、Nginx、MySQL、PHP(LEMP堆栈)的方法
  • Android笔试面试题AI答之Kotlin(20)
  • 【C#】【EXCEL】Bumblebee/Classes/ExData.cs
  • 【Eureka】Eureka 介绍与实战
  • 集合及数据结构第八节(下)———— 队列(Queue)、队列的模拟实现和练习
  • npm install` 报错
  • kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)
  • Linux的NFS共享存储服务(配置案例)