【C++】什么是静态库?什么是动态库?
静态库与动态库详解
静态库和动态库是软件开发中两种不同的代码共享和重用机制,它们在链接方式、内存使用和部署方式上有显著区别。
一、静态库(Static Library)
基本概念
静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。
主要特点
- 链接时机:编译时链接(构建阶段)
- 文件形式:
- Windows:
.lib
文件 - Linux/Unix:
.a
(Archive)文件
- Windows:
- 内存使用:库代码会被复制到每个使用它的程序中
- 部署方式:成为可执行文件的一部分,无需单独分发
- 更新方式:需要重新编译整个程序
工作流程
- 开发者编写库代码
- 编译生成目标文件(.obj/.o)
- 打包成静态库文件(.lib/.a)
- 其他程序链接时,所需代码从静态库提取并合并到最终可执行文件中
优点
- 部署简单(单个可执行文件)
- 无运行时依赖
- 性能可能略好(无动态链接开销)
- 更好的代码保护(库代码被整合)
缺点
- 可执行文件体积较大
- 相同库代码在内存中有多个副本
- 更新需要重新编译整个程序
典型应用场景
- 小型工具程序
- 性能敏感的核心组件
- 嵌入式系统开发
- 需要封闭源代码的库
二、动态库(Dynamic Library)
基本概念
动态库是在程序运行时才被加载的共享代码库。
主要特点
- 链接时机:运行时加载(执行阶段)
- 文件形式:
- Windows:
.dll
(Dynamic Link Library) - Linux:
.so
(Shared Object) - macOS:
.dylib
(Dynamic Library)
- Windows:
- 内存使用:多个程序可共享同一份库代码
- 部署方式:需要随程序一起分发或确保系统已安装
- 更新方式:替换库文件即可(需注意版本兼容)
工作流程
- 开发者编写库代码
- 编译生成动态库文件(.dll/.so)
- 程序运行时由操作系统加载器将库映射到内存
- 多个程序可共享同一份加载的库代码
优点
- 节省内存(多进程共享)
- 可执行文件体积小
- 更新方便(无需重新编译主程序)
- 支持插件架构
缺点
- 部署较复杂(需确保库文件存在)
- 可能存在版本冲突
- 轻微的性能开销(加载和符号解析)
典型应用场景
- 大型应用程序(如Office套件)
- 需要热更新的系统
- 提供插件机制的软件
- 操作系统API实现
三、核心区别对比
特性 | 静态库 | 动态库 |
---|---|---|
链接时机 | 编译时 | 运行时 |
文件独立性 | 合并到可执行文件中 | 独立文件 |
内存占用 | 每个进程独立副本 | 多进程共享 |
更新方式 | 需重新编译 | 替换库文件即可 |
加载速度 | 启动快(无加载开销) | 启动稍慢(需加载库) |
部署复杂度 | 简单(单文件) | 较复杂(需附带库文件) |
版本控制 | 无版本问题 | 需处理版本兼容性 |
四、动态链接库的种类
Windows系统
- 标准DLL (.dll)
- 最常见的动态链接库格式
- 包含可执行代码、数据和资源
- ActiveX DLL (.ocx)
- 专为ActiveX控件设计的DLL
- 包含COM对象实现
- 驱动程序DLL (.sys)
- 设备驱动程序的实现形式
Linux/Unix系统
- 共享对象 (.so)
- 类似于Windows的DLL
- 命名通常包含版本号(如libxyz.so.1.2)
macOS系统
- 动态库 (.dylib)
- macOS特有的动态库格式
- 框架(Frameworks)
- 包含动态库及其相关资源的捆绑包
五、静态链接库的种类
Windows平台
- COFF格式的.lib文件
- 传统Windows静态库格式
- 包含目标代码的集合
- 导入库(Import Library, 特殊.lib文件)
- 用于链接动态库(DLL)的辅助库
- 不包含实际代码,只有DLL的导出符号表
Linux/Unix平台
- ar格式的.a文件
- 使用
ar
工具创建的归档文件 - 命名通常为
lib<name>.a
- 使用
- 瘦归档(Thin Archive)
- 不实际包含目标文件,只保留文件路径引用
- 节省磁盘空间
macOS平台
- .a静态库
- 类似Unix的ar格式
- 通用二进制库(Universal Binary)
- 包含多种架构代码(x86_64, arm64等)
相关文章:
【C++】什么是静态库?什么是动态库?
静态库与动态库详解 静态库和动态库是软件开发中两种不同的代码共享和重用机制,它们在链接方式、内存使用和部署方式上有显著区别。 一、静态库(Static Library) 基本概念 静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。 主要特点 链接时…...
项目阅读:Instruction Defense
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 https://learnprompting.org/docs/prompt_hacking/defensive_measures/instruction https://www.doubao.com/chat/6945469301219586 速览 指令防御(Instructio…...
springboot中拦截器配置使用
文章目录 前置拦截器代码拦截器注册疑问 前置 你使用 javaspringboot 常用在: 身份验证与授权,使用拦截器检查用户的身份验证状态和权限级别,确保只有经过验证且有适当权限的用户能够访问特定资源日志记录与审计性能分析与监控࿰…...
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来! 自动驾驶技术正加速变革全球交通体系,它不仅是机器学习与计算机视觉的胜利,更是一场 高效通信架构的革命。自动驾驶汽车需要实时交换信息,比如: 传感器数据(雷达、激光雷达、摄像头)V2V(车与车通信)V2X(…...

在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化
在现代机器学习的发展历程中,过拟合(Overfitting)始终是亟需克服的重要挑战。其表现如同在训练数据上构建过度复杂的映射函数,虽能实现近乎完美的拟合,但其泛化能力却显著受限,导致模型在测试集或实际应用中…...
day36 python神经网络训练
目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…...

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件 文章目录 k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter简介二、kubernetes-event-exporter实战部署1. 创建Namespace&a…...
【Excel VBA 】窗体控件分类
一、Excel 窗体控件分类 Excel 中的窗体控件分为两大类型,适用于不同的开发需求: 类型所在选项卡特点表单控件开发工具 → 插入 → 表单控件简单易用,直接绑定宏,兼容性好,适合基础自动化操作。ActiveX 控件开发工具…...

C++性能相关的部分内容
C性能相关的部分内容 与底层硬件紧密结合 大端存储和小端存储(硬件概念) C在不同硬件上运行的结果可能不同 比如:输入01234567,对于大端存储的硬件会先在较大地址上先进行存储,而对于小端存储的硬件会先在较小地址上…...
Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
在 Spring Boot 项目中使用 JPA (Java Persistence API) / Hibernate (作为 JPA 的默认实现) 时,性能是一个非常关键的考量点。虽然 ORM 极大地简化了数据库交互,但如果不注意,很容易引入性能瓶颈。以下是一些关键的性能注意事项:…...
基于大模型的大肠癌全流程预测与诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型原理与架构 2.2 大模型在医疗领域的应用现状 三、术前风险预测与准备 3.1 术前风险预测指标 3.2 大模型预测方法与结果 3.3 基于预测结果的术前准备方案 四、术中风险预测与应…...
解决DeepSeek部署难题:提升效率与稳定性的关键策略
DeepSeek 部署中常见问题及对应解决方案 随着大模型技术的快速发展,DeepSeek 作为国内领先的大语言模型之一,广泛应用于自然语言处理、智能客服、内容生成等多个领域。 然而,在实际部署过程中,许多开发者和企业会遇到一系列挑战&a…...

AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!
极客侧边栏-AI板块 目前插件内已接入DeepSeek-R1满血版、Qwen3满血版 、豆包/智谱最新发布的推理模型以及各种顶尖AI大模型,并且目前全都可以免费不限次数使用,秒回不卡顿,联网效果超好! 相比于市面上很多AI产品,极客…...

GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…...

2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序
2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现: 图像的配准是图像处理领域中的一个典型问题和技术难点,其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变,医生可能使用…...

CV中常用Backbone-3:Clip/SAM原理以及代码操作
前面已经介绍了简单的视觉编码器,这里主要介绍多模态中使用比较多的两种backbone:1、Clip;2、SAM。对于这两个backbone简单介绍基本原理,主要是讨论使用这个backbone。 1、CV中常用Backbone-2:ConvNeXt模型详解 2、CV中…...

RPC 协议详解、案例分析与应用场景
一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务,其实现过程涉及多个关键组件与流程。 (一)核心组件 客户端(Client):发起远程过程调用的一方,它并不关心调…...

dify-plugin-daemon的.env配置文件
源码位置:dify-plugin-daemon\.env 本文使用dify-plugin-daemon v0.1.0版本,主要总结了dify-plugin-daemon\.env配置文件。为了本地调试方便,采用本地运行时环境WSL2Ubuntu22.04方式运行dify-plugin-daemon服务。 一.服务器基本配置 服务器…...
【Python】开发工具uv
文章目录 1. uv install1.1 下载安装脚本来安装1.2 使用pipx安装uv1.3 补充 2. 考虑在离线系统上安装uv2.1 下载并上传安装包2.2 用户级安装uv(~/.local/bin/)2.3 补充 3. uv 管理Python解释器4. uv 管理依赖5. uv运行代码5.1 uv不在项目下执行脚本5.2 u…...
《技术择时,价值择股》速读笔记
文章目录 书籍信息概览技术择时价值择股投资策略投资心态 书籍信息 书名:《技术择时,价值择股:A股投资实战笔记》 作者:二十八画生 概览 技术择时 三种简单方法,教你买在起涨点 趋势行情中的“买点”判断ÿ…...
Python可视化设计原则
在数据驱动的时代,可视化不仅是结果的呈现方式,更是数据故事的核心载体。Python凭借其丰富的生态库(Matplotlib/Seaborn/Plotly等),已成为数据可视化领域的主力工具。但工具只是起点,真正让图表产生价值的&…...
SAP重塑云ERP应用套件
在2025年Sapphire大会上,SAP正式发布了其云ERP产品的重塑计划,推出全新“Business Suite”应用套件,并对供应链相关应用进行AI增强升级。这一变革旨在简化新客户进入SAP生态系统的流程,同时为现有客户提供更加统一、智能和高效的业…...
2025.5.25总结
今天早上刷了会手机,然后下午去刷了一道科目一,限时训练3.5h。遗憾的是,这周只刷了一道题,并没有达成每周两道的目标。 其次,一天下来跟平时的节假日一样,有些小压抑。我也察觉到了自己的情绪。烦心事无非…...

(九)PMSM驱动控制学习---无感控制之高阶滑膜观测器
在之前的文章中,我们介绍了永磁同步电机无感控制中的滑模观测器,但是同时我们也认识到了他的缺点:因符号函数带来的高频切换分量,使用低通滤波器引发相位延迟;在本篇文章,我们将会介绍高阶滑模观测器的无感…...
6个跨境电商独立站平台
1. WP最主题(WPZUI) 官网:http://www.wpzui.com 简介: WP最主题专注于专业WordPress主题开发定制,致力于为用户提供高质量、高性能的WordPress主题。其主题设计注重用户体验和SEO优化,适用于多种网站类型,包括企业站…...
电子电路:电学都有哪些核心概念?
电子是基本粒子,带负电荷。电荷是物质的一种属性,电子带有负电荷,而质子带有正电荷。电荷的单位是库仑。 电流呢,应该是指电荷的流动,单位是安培,也就是库仑每秒。所以电流其实就是电荷在导体中的移动形成的。比如,当电子在导线中流动时,就形成了电流。不过要注意,传…...
SQL进阶之旅 Day 2:基础查询优化技巧
【SQL进阶之旅 Day 2】基础查询优化技巧 开篇:为什么需要基础查询优化? 在SQL学习的旅程中,掌握基础查询优化是迈向专业数据库开发的关键一步。随着数据量的爆炸式增长,简单的SELECT语句已经无法满足现代应用对性能的要求。今天…...
时序数据库 TDengine × Superset:一键构建你的可视化分析系统
如果你正在用 TDengine 管理时序数据,写 SQL 查询没问题,但一到展示环节就犯难——图表太基础,交互不够,甚至连团队都看不懂你辛苦分析的数据成果?别担心,今天要介绍的这个组合,正是为你量身打造…...
一键化部署
好的,我明白了。你希望脚本变得更简洁,主要负责: 代码克隆:从 GitHub 克隆你的后端和前端项目,并在克隆前确保目标目录为空。文件复制:将你预先准备好的 Dockerfile (后端和前端各一个)、前端的 nginx.con…...
Win 系统 conda 如何配置镜像源
通过命令添加镜像源(推荐) 以 清华源 为例,依次执行以下命令: # 添加主镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main # 添加免费开源镜像源 conda config --add channels http…...