【C++】什么是静态库?什么是动态库?

news2025/5/27 18:17:06

静态库与动态库详解

静态库和动态库是软件开发中两种不同的代码共享和重用机制,它们在链接方式、内存使用和部署方式上有显著区别。

一、静态库(Static Library)

基本概念

静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。

主要特点

  1. 链接时机:编译时链接(构建阶段)
  2. 文件形式
    • Windows: .lib 文件
    • Linux/Unix: .a (Archive)文件
  3. 内存使用:库代码会被复制到每个使用它的程序中
  4. 部署方式:成为可执行文件的一部分,无需单独分发
  5. 更新方式:需要重新编译整个程序

工作流程

  1. 开发者编写库代码
  2. 编译生成目标文件(.obj/.o)
  3. 打包成静态库文件(.lib/.a)
  4. 其他程序链接时,所需代码从静态库提取并合并到最终可执行文件中

优点

  • 部署简单(单个可执行文件)
  • 无运行时依赖
  • 性能可能略好(无动态链接开销)
  • 更好的代码保护(库代码被整合)

缺点

  • 可执行文件体积较大
  • 相同库代码在内存中有多个副本
  • 更新需要重新编译整个程序

典型应用场景

  • 小型工具程序
  • 性能敏感的核心组件
  • 嵌入式系统开发
  • 需要封闭源代码的库

二、动态库(Dynamic Library)

基本概念

动态库是在程序运行时才被加载的共享代码库。

主要特点

  1. 链接时机:运行时加载(执行阶段)
  2. 文件形式
    • Windows: .dll (Dynamic Link Library)
    • Linux: .so (Shared Object)
    • macOS: .dylib (Dynamic Library)
  3. 内存使用:多个程序可共享同一份库代码
  4. 部署方式:需要随程序一起分发或确保系统已安装
  5. 更新方式:替换库文件即可(需注意版本兼容)

工作流程

  1. 开发者编写库代码
  2. 编译生成动态库文件(.dll/.so)
  3. 程序运行时由操作系统加载器将库映射到内存
  4. 多个程序可共享同一份加载的库代码

优点

  • 节省内存(多进程共享)
  • 可执行文件体积小
  • 更新方便(无需重新编译主程序)
  • 支持插件架构

缺点

  • 部署较复杂(需确保库文件存在)
  • 可能存在版本冲突
  • 轻微的性能开销(加载和符号解析)

典型应用场景

  • 大型应用程序(如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等)

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

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

相关文章

在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化

在现代机器学习的发展历程中&#xff0c;过拟合&#xff08;Overfitting&#xff09;始终是亟需克服的重要挑战。其表现如同在训练数据上构建过度复杂的映射函数&#xff0c;虽能实现近乎完美的拟合&#xff0c;但其泛化能力却显著受限&#xff0c;导致模型在测试集或实际应用中…

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK补充篇&#xff1a;kubernetes-event-exporter收集Kubernetes集群中的事件 文章目录 k8s部署ELK补充篇&#xff1a;kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter简介二、kubernetes-event-exporter实战部署1. 创建Namespace&a…

C++性能相关的部分内容

C性能相关的部分内容 与底层硬件紧密结合 大端存储和小端存储&#xff08;硬件概念&#xff09; C在不同硬件上运行的结果可能不同 比如&#xff1a;输入01234567&#xff0c;对于大端存储的硬件会先在较大地址上先进行存储&#xff0c;而对于小端存储的硬件会先在较小地址上…

AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!

极客侧边栏-AI板块 目前插件内已接入DeepSeek-R1满血版、Qwen3满血版 、豆包/智谱最新发布的推理模型以及各种顶尖AI大模型&#xff0c;并且目前全都可以免费不限次数使用&#xff0c;秒回不卡顿&#xff0c;联网效果超好&#xff01; 相比于市面上很多AI产品&#xff0c;极客…

GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、O…

2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现&#xff1a; 图像的配准是图像处理领域中的一个典型问题和技术难点&#xff0c;其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变&#xff0c;医生可能使用…

CV中常用Backbone-3:Clip/SAM原理以及代码操作

前面已经介绍了简单的视觉编码器&#xff0c;这里主要介绍多模态中使用比较多的两种backbone&#xff1a;1、Clip&#xff1b;2、SAM。对于这两个backbone简单介绍基本原理&#xff0c;主要是讨论使用这个backbone。 1、CV中常用Backbone-2&#xff1a;ConvNeXt模型详解 2、CV中…

RPC 协议详解、案例分析与应用场景

一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务&#xff0c;其实现过程涉及多个关键组件与流程。 &#xff08;一&#xff09;核心组件 客户端&#xff08;Client&#xff09;&#xff1a;发起远程过程调用的一方&#xff0c;它并不关心调…

dify-plugin-daemon的.env配置文件

源码位置&#xff1a;dify-plugin-daemon\.env 本文使用dify-plugin-daemon v0.1.0版本&#xff0c;主要总结了dify-plugin-daemon\.env配置文件。为了本地调试方便&#xff0c;采用本地运行时环境WSL2Ubuntu22.04方式运行dify-plugin-daemon服务。 一.服务器基本配置 服务器…

(九)PMSM驱动控制学习---无感控制之高阶滑膜观测器

在之前的文章中&#xff0c;我们介绍了永磁同步电机无感控制中的滑模观测器&#xff0c;但是同时我们也认识到了他的缺点&#xff1a;因符号函数带来的高频切换分量&#xff0c;使用低通滤波器引发相位延迟&#xff1b;在本篇文章&#xff0c;我们将会介绍高阶滑模观测器的无感…

Devicenet主转Profinet网关助力改造焊接机器人系统智能升级

某汽车零部件焊接车间原有6台焊接机器人&#xff08;采用Devicenet协议&#xff09;需与新增的西门子S7-1200 PLC&#xff08;Profinet协议&#xff09;组网。若更换所有机器人控制器或上位机系统&#xff0c;成本过高且停产周期长。 《解决方案》 工程师选择稳联技术转换网关…

《STL--list的使用及其底层实现》

引言&#xff1a; 上次我们学习了容器vector的使用及其底层实现&#xff0c;今天我们再来学习一个容器list&#xff0c; 这里的list可以参考我们之前实现的单链表&#xff0c;但是这里的list是双向循环带头链表&#xff0c;下面我们就开始list的学习了。 一&#xff1a;list的…

python的pip怎么配置的国内镜像

以下是配置pip国内镜像源的详细方法&#xff1a; 常用国内镜像源列表 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple中科大&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple华为云&#xff1…

PCB 通孔是电容性的,但不一定是电容器

哼&#xff1f;……这是什么意思&#xff1f;…… 多年来&#xff0c;流行的观点是 PCB 通孔本质上是电容性的&#xff0c;因此可以用集总电容器进行建模。虽然当信号的上升时间大于或等于过孔不连续性延迟的 3 倍时&#xff0c;这可能是正确的&#xff0c;但我将向您展示为什…

公有云AWS基础架构与核心服务:从概念到实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 &#xff08;初学者技术专栏&#xff09; 一、基础概念 定义&#xff1a;AWS&#xff08;Amazon Web Services&#xff09;是亚马逊提供的云计算服务&a…

Python60日基础学习打卡D35

import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import time import matplotlib.pyplot as plt# 设置GPU设…

目标检测 RT-DETR(2023)详细解读

文章目录 主干网络&#xff1a;Encoder&#xff1a;不确定性最小Query选择Decoder网络&#xff1a; 将DETR扩展到实时场景&#xff0c;提高了模型的检测速度。网络架构分为三部分组成&#xff1a;主干网络、混合编码器、带有辅助预测头的变换器编码器。具体来说&#xff0c;先利…

微信小程序 隐私协议弹窗授权

开发微信小程序的第一步往往是隐私协议授权&#xff0c;尤其是在涉及用户隐私数据时&#xff0c;必须确保用户明确知晓并同意相关隐私政策。我们才可以开发后续的小程序内容。友友们在按照文档开发时可能会遇到一些问题&#xff0c;我把所有的授权方法和可能遇到的问题都整理出…

金众诚业财一体化解决方案如何提升项目盈利能力?

在工程项目管理领域&#xff0c;复杂的全生命周期管理、成本控制的精准性以及业务与财务的高效协同&#xff0c;是决定项目盈利能力的核心要素。随着数字化转型的深入&#xff0c;传统的项目管理方式已难以满足企业对效率、透明度和盈利能力的需求。基于金蝶云星空平台打造的金…

LabVIEW中EtherCAT从站拓扑离线创建及信息查询

该 VI 主要用于演示如何离线创建 EtherCAT 从站拓扑结构&#xff0c;并查询从站相关信息。EtherCAT&#xff08;以太网控制自动化技术&#xff09;是基于以太网的实时工业通信协议&#xff0c;凭借其高速、高效的特性在自动化领域广泛应用。与其他常见工业通讯协议相比&#xf…