动静态库的理解

其实我们平常写一些C或C++的代码的时候,在链接过程都会用到动静态库,因为一些基础的代码我们是不用写的(比如输入输出函数),我们只需要包个头文件,这些库和我们的编译好的代码一起链接后才会形成可执行程序

那么我们用到的库分为两种,静态库和动态库;链接方式于是就分为了动态链接和静态链接

动态链接是库就一份,可执行程序中只存有库函数的地址,要调用的话可以根据地址去调用函数

静态链接则是直接把库拷贝到可执行程序中,这就使可执行程序在运行时不需要库了

因为动静态库的差异,它们是有各自的优缺点的

动态库:

        优点:比较节省资源,不会出现太多的重复代码(这里的资源可不仅仅指的是磁盘资源,还有运行时的内存资源,传输时的网络资源

        缺点:对库的依赖性强,一旦少了这个库,那么用到这个库的程序都无法运行

静态库:

        优点:不依赖库,同类型平台都可以运行使用

        缺点:可执行程序体积比较大,比较浪费资源

动静态库在不同的操作系统下后缀也是不一样的

LinuxWindows
动态库.so.dll
静态库.a.lib

我们在gcc/g++下是默认使用动态链接的,有一个命令可以查看文件依赖的库(ldd+文件名),还有一个命令可以查看文件的具体信息(file+文件名),当然了,我们如果想使用静态链接的话也是有命令的,gcc后加选项-static,我们下面来试验一下两种链接方式有什么区别

有的云服务器是默认没有静态库的,我们要用yum安装一下

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

我们安装完之后可以在下面的路径看到

这是我将test.c用两种链接方式形成的可执行程序,可以看到静态链接形成的可执行程序是比较大的

也可以看到动态链接确实是需要依赖一些库的,而静态链接不需要

也可以看到,画起来的部分确实写得是静态链接,而上面写的是动态链接

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2813329.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

进程概念与进程状态

目录 一、进程理解和进程控制块 进程理解 Linux中的进程 查看进程 1.ps ajx 查看所有的进程信息 2. /proc/目录查看 系统调用接口 getpid() 获取进程的pid ​编辑 getppid() 获取进程的父进程的pid fork创建进程 fork用法: fork原理理解: 二、进程状态 进程状态…

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑!这个问题就涉及到了资金投资的额度了。众所周知,现在京东里面一个英伟达的显卡,按照RTX3090(24G显存-涡轮风扇)版本报价是7000-7500之间。如果你买一张这样的单卡…

十一、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法(promotion)重新定义paintEvent事件 2、实现程序 (1)创建项目,基于QWidget (2)添加类,为Widget组件提升类 #inclu…

day44 ● 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 首先再回顾一下01背包的核心代码 for(int i 0; i < weight.size(); i) { // 遍历物品for(int j bagWeight; j > weight[i]; j--) { // 遍历背包容量dp[j] max(dp[j], dp[j - weight[i]] val…

(二十)devops持续集成开发——使用jenkins的docker插件完成docker项目的流水线发布

前言 本节内容主要介绍jenkins如何集成docker插件&#xff0c;完成docker项目的流水线发布&#xff0c;在前面的章节中我们也介绍过docker项目的发布&#xff0c;可直接通过shell命令调用本地的docker服务完成docker项目的发布&#xff0c;本节内容我们使用docker插件来完成do…

Open CASCADE学习|视图

目录 Mainwin.h Mainwin.cpp Mainwin.h ​#pragma once#include <QtWidgets/QMainWindow>#include "Displaywin.h"#include "OCC.h"class Mainwin : public QMainWindow{ Q_OBJECTpublic: Mainwin(QWidget* parent nullptr); ~Mainwin();​pri…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Shuffle)

Shuffle(随机洗牌)&#xff0c;这个预处理器会把参考图的颜色打乱搅拌到一起&#xff0c;然后重新组合的方式重新生成一张图&#xff0c;可以想象出来这是一个整体风格控制的处理器。 那么问题来了&#xff0c;官方为啥会设计个这样的处理器呢&#xff0c;主要是给懒人用的&am…

idea生成WebServices接口

文章目录 idea生成WebServices接口1.创建接口2.生成wsdl文件3.在soapUI中&#xff0c;生成6个文件4.将生成的文件拷贝到工程中5.在service-config中注册服务 idea生成WebServices接口 1.创建接口 新建一个webServices工程&#xff0c;按照接口规范生成接口、请求类、响应类。…

低代码与大语言模型的探索实践

低代码系列文章&#xff1a; 可视化拖拽组件库一些技术要点原理分析可视化拖拽组件库一些技术要点原理分析&#xff08;二&#xff09;可视化拖拽组件库一些技术要点原理分析&#xff08;三&#xff09;可视化拖拽组件库一些技术要点原理分析&#xff08;四&#xff09;低代码…

《TCP/IP详解 卷一》第8章 ICMPv4和ICMPv6

目录 8.1 引言 8.1.1 在IPv4和IPv6中的封装 8.2 ICMP 报文 8.2.1 ICMPv4 报文 8.2.2 ICMPv6 报文 8.2.3 处理ICMP报文 8.3 ICMP差错报文 8.3.1 扩展的ICMP和多部报文 8.3.2 目的不可达和数据包太大 8.3.3 重定向 8.3.4 ICMP 超时 8.3.5 参数问题 8.4 ICMP查询/信息…

Mysql主从GTID与binlog

GTID与binlog **MySQL GTID&#xff08;Global Transaction Identifier&#xff09;和binlog&#xff08;二进制日志&#xff09;是用于搭建主从复制的两种不同的机制。** **GTID是MySQL 5.6版本引入的一种全局事务标识符&#xff0c;用于跟踪和标识复制过程中的事务。每个事务…

【玩转pandas系列】pandas数据结构—DataFrame

文章目录 前言一、DataFrame创建1.1 字典创建1.2 NumPy二维数组创建 二、DataFrame切片2.1 行切片2.2 列切片2.3 行列切片 三、DataFrame运算3.1 DataFrame和标量的运算3.2 DataFrame之间的运算3.3 Series和DataFrame之间的运算 四、DataFrame多层次索引4.1 多层次索引构造1.隐…

解决“设备未经过play保护认证”问题

第一步&#xff1a;获取GSF id 可以通过apkPure安装device id&#xff0c;复制GSF id&#xff0c;如下图 第二步&#xff1a;注册 打开网址&#xff1a;&#xff08;https://www.google.com/android/uncertified/?pli1 &#xff09;等待注册&#xff0c;很快就能完成, 第三步…

js 实战小案例

实战 时间 js 格式化时间 <script type"text/javascript">function formatDate(date) { let year date.getFullYear(); let month String(date.getMonth() 1).padStart(2, 0); // getMonth() 返回的月份是从0开始的&#xff0c;所以要加1&#xff0c;并…

如何快速起盘 七人拼团模式帮您解决 企业家可以过来看看!

七人团购模式&#xff0c;又称即拼模式&#xff0c;是一种创新的商业模式&#xff0c;通过结合拼团与二二复制的玩法&#xff0c;实现了快速的裂变和引流。该模式不仅具有完善的奖励激励制度&#xff0c;能够激发会员的推广积极性&#xff0c;还能显著提高平台产品的销量&#…

JavaWeb个人学习01

1:RequestParam(defaultValue "默认的值") 这个可以在一个参数的前面写上 要是前端不传值进来的话 这个形参就是你定义的默认值 2: slf4j 对应的是日志的输出 log.info("参数是 {}", detail); 3: 分页插件 PageHelper 用法: 准备工作: 引入依赖 …

mybatis 集成neo4j功能实现

文章目录 前言一、引入jar包依赖二、配置 application.properties三、Mybatis Neo4j分页插件四、Mybatis Neo4j自定义转换器handler五、MybatisNeo4j代码示例总结 前言 MyBatis是一个基于Java语言的持久层框架&#xff0c;它通过XML描述符或注解将对象与存储过程或SQL语句进行…

微信自动回复消息如何设置?演示如下

自动回复 当下&#xff0c;微信已经成为在工作中必不可少的沟通工具。但微信并没有自动回复的功能&#xff0c;一旦咨询量非常大&#xff0c;往往会出现回复不及时的情况。这样不仅会影响客户满意度&#xff0c;降低客户转化率&#xff0c;甚至会导致客户流失。 那如何实现自动…

Springboot教程(二)——过滤器、拦截器

过滤器 过滤器可以在调用控制器方法之前进行一些操作&#xff0c;过滤器类一般放在filter包下。 配置类注册 使用过滤器时&#xff0c;要实现Filter接口&#xff0c;并重写doFilter方法&#xff1a; class TestFilter : Filter {override fun doFilter(request: ServletReq…

怎么消除照片上的路人?分享几个无痕消除工具

穿梭于繁忙的街头&#xff0c;我们总会在不经意间捕捉到那些精彩的瞬间&#xff0c;但往往也会因为一些无关的路人破坏了整个画面的和谐。在摄影后期处理中&#xff0c;消除照片中的路人是一项常见的需求。现在&#xff0c;让我们一起探索如何巧妙地消除照片中的路人&#xff0…