静态库的概念及影响

1、目标文件的生成:

由编译器针对源文件编译生成,生成的.o或者.so(动态库)或者.a(静态库)也可以看作是目标文件

2、静态库的生成:

由给定的一堆目标文件以及链接选项链接器可以生成两种库,分别是静态库以及动态库;
在这里插入图片描述

3、静态链接指定是哪个阶段/过程?

静态链接是指将多个目标文件链接在一起以创建可执行文件(该可执行文件用到了静态库)或静态库的过程

4、当使用静态库作为目标文件进行链接时(这个过程叫做静态链接),链接器做了什么?

当你使用静态库进行静态链接时,链接器只取静态库中被使用到的目标文件,而静态库中没被使用的目标文件不会进行链接。然后将它们与你的程序的其他目标文件一起链接到最终的可执行文件中。
在这里插入图片描述

5、将静态库链接到动态库时,链接器做了什么?有什么影响?

1)链接器做了什么:
静态库链接到动态库时,链接器会执行静态链接,即将这个静态库中被使用到的代码完全复制到生成的动态库中

2)有什么影响:

  1. 如果多个动态库都链接了同一个静态库,每个动态库都会包含一份该静态库的拷贝。会导致内存浪费
  2. 可能存在一致性问题,即动态库A拷贝了静态库M的版本1;动态库B拷贝了静态库M的版本2,而静态库M的版本1与版本2对同一个函数做了修改,这样可执行文件运行时调用版本1还是版本2的函数是不确定的

3)建议:
将静态库链接到动态库中不是一个常见或推荐的做法,因为它可能引发一系列问题。如果有必要共享代码,通常更好的做法是将代码放入动态库中。

6、由静态库引发的程序段错误案例

1)现象: 可执行文件E运行时,调用一个类C中的函数F后崩溃,提示段错误。

2)直接原因:分析后段错误的原因是野指针(调飞了),即找不到函数F的地址。

3)根本原因: 该类C定义在静态库M中,静态库M被静态链接到动态库A与动态库B中,动态库A与B又被链接到可执行文件E中。而动态库A与B是分别在不同时间编译的。A与B编译期间一个coder修改了静态库M中类C的内容,导致A与B用到的静态库M不同/类C不同/函数F地址不同(即类C的声明所在的头文件H未对齐),即遇到了【5】中提到的一致性问题

4)段错误出现的流程可执行文件E运行时,按照动态库A中包含的M中的头文件H查找函数F的内存地址并调用,而可执行文件E加载了动态库B中包含的M中函数F所在的头文件H的声明与实现。因此出现了地址错位,因此该指针为野指针,导致段错误

7、参考资料:

1)彻底理解链接器:三,库与可执行文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双绞线(寻线仪,测线仪),光纤测试工具(红光笔,OTDR,光功率计)

网络测试方式: 根据测试中是否向被测网络注入测试流量,可以将网络测试方法分为主动测试和被动测试。 主动测试:利用测试工具有目的地主动问被测网络注入测试流量,根据测试流量的传送情况分析网络技术参数。优点是具备良好的灵活…

年底赶项目?买核心板送开发板!T113核心板2款芯片6种配置选择

全志T113系列芯片是目前比较受欢迎的国产入门级嵌入式工业芯片。米尔是基于T113芯片开发较早、提供配置最全的厂家,是目前唯一一家提供T113-S和T113-i两种芯片核心板的厂家。更好的消息是,T113-i的核心板兼容T113-S的核心板,同一个硬件设计&a…

pom.xml详解

我们在开发Java应用程序时,pom.xml文件是项目中的核心配置文件之一,它结合Maven实现对项目依赖的拉取,今天就详细了解一下pom.xml文件的配置 Maven是一种构建工具,它用于构建、管理和发布Java项目pom.xml文件包含了项目的所有重要…

当科技遇上神器:用Streamlit定制AI可视化问答界面

Streamlit是一个开源的Python库,利用Streamlit可以快速构建机器学习应用的用户界面。 本文主要探讨如何使用Streamlit构建大模型外部知识检索的AI问答可视化界面。 我们先构建了外部知识检索接口,然后让大模型根据检索返回的结果作为上下文来回答问题。…

浅谈无源供电无线测温在线监测系统应用方案

安科瑞 崔丽洁 摘要:无源供电无线测温在线监测系统是一种基于声表面波技术的测温技术,在变电站监测方面得到了很好的技术实践应用。本文对无源供电无线测温在线监测系统研究应用进行分析研究。 关键词:设备检测;无线测温。 引言 在…

行情分析——加密货币市场大盘走势(11.3)

大饼昨日与今日目前都是下跌态势,近期依然要保持逢低做多的策略。现在下跌,可以继续等待,也可以入场一部分仓位的多单,回调才是给机会上车。MACD日线来看,会继续回调,因此这个位置还是可以在等等。 以太昨日…

LeetCode题:21合并两个有序链表

21合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], …

vcruntime140.dll无法继续执行代码修复教程

在计算机的世界里,我们经常会遇到各种各样的问题,其中之一就是“vcruntime140.dll缺失”。这个问题可能会影响到我们的正常使用,但是别担心,今天我就来给大家分享一下关于vcruntime140.dll缺失的4种修复方案。 首先,我…

mac下载安装jenkins

下载 https://get.jenkins.io/war/ 启动 使用命令行启动 java -jar jenkins.war 浏览器访问 IP:8080 或 localhost:8080 ,对jenkins进行配置,刚开始需要输入密码 终端会展示密码和密码存放位置 jenkins插件下载地址, 下载后自行上传。 I…

【ChatGLM2-6B】P-Tuning训练微调

机器配置 阿里云GPU规格ecs.gn6i-c4g1.xlargeNVIDIA T4显卡*1GPU显存16G*1 准备训练数据 进入/ChatGLM-6B/ptuningmkdir AdvertiseGencd AdvertiseGen上传 dev.json 和 train.json内容都是 {"content": "你是谁", "summary": "你好&…

如何使用ps制作ico图标文件

如何使用ps制作ico图标文件 Chapter1 如何使用ps制作ico图标文件Chapter2 ICOFormat.8bi(Photoshop Ico、Cur插件)的下载使用1. ICOFormat.8bi的作用2. ICOFormat.8bi使用 Chapter3 ps手机计算机图标教程,手绘设计精美手机APP软件图标的PS教程步骤 01 制…

计算机网络-应用层

文章目录 应用层协议原理万维网和HTTP协议万维网概述统一资源定位符HTML文档 超文本传输协议(HTTP)HTTP报文格式请求报文响应报文cookie 万维网缓存与代理服务器 DNS系统域名空间域名服务器和资源记录域名解析过程递归查询迭代查询 动态主机配置协议&…

解决CSS中height:100%失效的问题

出现BUG的场景,点击退出到登录页面,发现高度不对 上面出现了一种只是占了内容的高度,没有占满100%,为什么会出现这种情况呐? 让div的height"100%",执行网页时,css先执行到&#xff0…

华为OD机试 - 数组组成的最小数字 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

YOLOv5:按每个类别的不同置信度阈值输出预测框

YOLOv5:按每个类别的不同置信度阈值输出预测框 前言前提条件相关介绍YOLOv5:按每个类别的不同置信度阈值输出预测框预测修改detect.py输出结果 验证修改val.py输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更…

H5ke9

上次fetvh就一个参数url,,就是get请求 fetch还可以第二个参数对象,可以指定method:改为POST 请求头header :发送txt,servlet,json给客户端,,异步请求图片 1 这节客户端传到服务器端 2异步文件上传,两三行代码把文件传输 mouseover事件 .then()的使用 是Promise对象的一个方法…

持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录实践(Python3.10)

Faster-Whisper是Whisper开源后的第三方进化版本,它对原始的 Whisper 模型结构进行了改进和优化。这包括减少模型的层数、减少参数量、简化模型结构等,从而减少了计算量和内存消耗,提高了推理速度,与此同时,Faster-Whi…

tmux工具

B站学习地址:tmux教程

vue封装独立组件:实现手写签名功能

目录 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-sign 2.1.1 安装 2.1.2 了解 2.1.3 参数说明 第三章 源代码 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-esign 2.1.1 安装 npm install vue-esign --save 2.1.2 了解 兼容pc端和移动端有对应的参…

Redis的四种部署方案

这篇文章介绍Reids最为常见的四种部署模式,其实Reids和数据库的集群模式差不多,可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署,其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境…