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

windows 动态库和静态库 介绍

在Windows平台上,动态库和静态库都是用于组织和共享代码的方式。这些库文件的扩展名和用途有一些区别。

1. 静态库和动态库

  • 静态库(Static Library):

    • 文件扩展名:.lib
    • 在编译链接时,静态库的代码被直接嵌入到可执行文件中。
    • 优点:编译后的可执行文件独立,不依赖外部库文件。
    • 缺点:如果多个程序使用同一个静态库,会导致代码冗余。
  • 动态库(Dynamic Link Library):

    • 文件扩展名:.dll
    • 在编译链接时,程序只包含对动态库的引用,实际的代码在运行时才会加载。
    • 优点:节省内存,多个程序可以共享同一个动态库。
    • 缺点:程序运行时需要确保能找到对应版本的动态库。

2. Windows下的库文件

  • 静态库:

    • 静态库在Windows上通常使用 .lib 扩展名。例如:mylib.lib
    • 在使用静态库的项目中,需要在项目属性的链接器设置中添加 .lib 文件。
  • 动态库:

    • 动态库在Windows上通常使用 .dll 扩展名。例如:mylib.dll
    • 在使用动态库的项目中,需要在项目属性的链接器设置中添加 .lib 文件(这是用于链接动态库的导入库)。
    • 动态库还需要在运行时找到,可以将 .dll 文件放在程序可执行文件所在的目录,或者添加到系统路径中。

3. 导入库(Import Library)

  • 导入库是什么:

    • 在Windows上,用于链接动态库的 .lib 文件通常被称为导入库。导入库实际上是一种特殊的静态库,包含了调用动态库函数的信息。
  • 导入库的生成:

    • Visual Studio 编译动态库时,会自动生成一个与动态库同名但扩展名为 .lib 的导入库。
    • 这个导入库包含了动态库的函数信息,用于在链接时告诉编译器如何调用动态库中的函数。

4. 使用静态库的步骤

  1. 编写代码并编译成目标文件(.obj):

    cl /c mylib.cpp
    
  2. 将目标文件打包成静态库:

    lib /OUT:mylib.lib mylib.obj
    
  3. 在项目中链接静态库:

    • 在 Visual Studio 中,将 mylib.lib 添加到项目属性的链接器设置中。

5. 使用动态库的步骤

  1. 编写代码并编译成目标文件(.obj):

    cl /c mylib.cpp
    
  2. 编写代码并编译成动态库(.dll):

    cl /LD mylib.obj
    
  3. 在项目中链接动态库:

    • 在 Visual Studio 中,将 mylib.lib(导入库)添加到项目属性的链接器设置中。
    • mylib.dll 放置在可执行文件所在目录或者添加到系统路径中。

总结

  • 静态库和动态库都是在组织和共享代码方面的重要概念。
  • 静态库在链接时直接嵌入到可执行文件中,而动态库在运行时加载。
  • 在Windows上,静态库使用 .lib 扩展名,动态库使用 .dll 扩展名。
  • 链接动态库时需要使用导入库(.lib 文件)提供函数信息。

上文是简单的介绍,实际使用过程中可能还涉及到一些特殊情况和编译器/工具的不同行为。

相关文章:

windows 动态库和静态库 介绍

在Windows平台上,动态库和静态库都是用于组织和共享代码的方式。这些库文件的扩展名和用途有一些区别。 1. 静态库和动态库 静态库(Static Library): 文件扩展名:.lib在编译链接时,静态库的代码被直接嵌入…...

微软官方镜像下载大全(windows iso 官方镜像)

原本只是想下一个Windows Server 2022中文版的镜像,后面发现要么就是慢得一批的某盘,要么就是磁力,我想直接下载简简单单,找了一圈没有找到。官网下载需要注册、登录乱七八糟,最终终于找到下载方法了,适用于…...

ceph块存储学习

目录 ceph的组件和功能 ceph的数据读写流程 ceph存储池学习 ceph的组件和功能 Ceph OSD:功能是存储数据,处理数据的复制、恢复、平衡数据分布,并将一些相关数据提供给Ceph Monitor,。 Ceph Monitor: 功能是维护整个集群健康状态&…...

开发模型和测试模型

1. 开发模型 1.1 瀑布模型 瀑布模型是其他模型的基础框架 start—>需求分析---->计划----->设计----->编码----->测试----->End(其实就是软件开发的生命周期) 特点:线性的开发流程 缺陷:测试被后置。①风险往…...

Kubectl 部署简单应用

创建新服务 kubectl create deployment kubernetes-bootcamp --imagegcr.io/google-samples/kubernetes-bootcamp:v1 查看 kubectl get deployments 打开新的终端执行 kubectl proxy 此时,切回上一个终端,通过 kubectl get pods 可查看已部署好的pod。并…...

Flink电商实时数仓(三)

DIM层代码流程图 维度层的重点和难点在于实时电商数仓需要的维度信息一般是动态的变化的,并且由于实时数仓一般需要一直运行,无法使用常规的配置文件重启加载方式来修改需要读取的ODS层数据,因此需要通过Flink-cdc实时监控MySql中的维度数据…...

四种消息队列,如何选型

这篇文章,主要讲述 Kafka、RabbitMQ、RocketMQ 和 ActiveMQ 这 4 种消息队列的异同,无论是面试,还是用于技术选型,都有非常强的参考价值。 01 消息队列基础 1.1 什么是消息队列? 消息队列是在消息的传输过程中保存消…...

flutter开发windows应用的库

一、window_manager 这个插件允许 Flutter 桌面应用调整窗口的大小和位置 地址:https://github.com/leanflutter/window_manager二、win32 一个包,它使用FFI包装了一些最常见的Win32 API调用,使Dart代码可以访问这些调用,而不需…...

机器学习--线性回归

目录 监督学习算法 线性回归 损失函数 梯度下降 目标函数 更新参数 批量梯度下降 随机梯度下降 小批量梯度下降法 数据预处理 特征标准化 正弦函数特征 多项式特征的函数 数据预处理步骤 线性回归代码实现 初始化步骤 实现梯度下降优化模块 损失与预测模块 …...

【Spring Boot】面试题汇总,带答案的那种

继上次的文章【MySQL连环炮,你抗的住嘛?】爆火之后,越来越多的小伙伴后台留言,要求阿Q总结下其他的“连环炮”知识点,想在金九银十的面试黄金期轻松对线面试官。 同样为了节省大家的时间,阿Q最近对【Sprin…...

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

文章目录 前言千帆AppBuilder什么是千帆AppBuilderAppBuilder能做什么 体验千帆AppBuilderJava知识库高考作文小助手 总结 前言 前天,在【百度智能云智算大会】上,百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台,可以…...

字符串压缩

...

MsSQL中的索引到底长啥样,查找过程怎么进行

参考文章一 参考文章二 建表 mysql> create table user(-> id int(10) auto_increment,-> name varchar(30),-> age tinyint(4),-> primary key (id),-> index idx_age (age)-> )engineinnodb charsetutf8mb4;insert into user(name,age) values(张三,…...

WPF 全局异常处理

在Application中存在三种异常事件EventHandler DispatcherUnhandledExceptionAppDomain.CurrentDomain.UnhandledExceptionTaskScheduler.UnobservedTaskException 其中 DispatcherUnhandledException 是在异常由应用程序引发但未进行处理时发生,但无法捕获多线程…...

Flink系列之:Elasticsearch SQL 连接器

Flink系列之:Elasticsearch SQL 连接器 一、Elasticsearch SQL 连接器二、创建 Elasticsearch表三、连接器参数四、Key 处理五、动态索引六、数据类型映射 一、Elasticsearch SQL 连接器 Sink: BatchSink: Streaming Append & Upsert ModeElasticsearch 连接器…...

java中将Map集合、对象、字符串转换为JSON对象

1、Map集合转JSON对象 创建一个Map集合&#xff1b; 新建json对象&#xff0c;并将Map引入json中。 public void demo1(){ //创建一个Map集合Map<String, String> map new HashMap<>();map.put("1729210001","zhangsan");map.put("17292…...

理解Spring中bean的作用域

singleton:Spring Ioc容器中只会存在一个共享的Bean实例&#xff0c;无论有多少个Bean引用它&#xff0c;始终指向同一个对象&#xff0c;作用域为Spring中的缺省&#xff08;同一package&#xff09;作用域 prototype:每次通过Spring容器获取prototype定义的bean时&#xff0c…...

edge中以右键“打印”的方式“保存”当前页面的pdf形式,下载过程中卡进度的问题

目录 问题描述&#xff1a; 可能的问题&#xff1a; 解决&#xff1a; 问题描述&#xff1a; 特殊情况下需要保存网页的pdf形式&#xff0c;但页面没有类似“导出pdf”的功能按钮&#xff0c;可以通过页面右键“打印”的方式“保存”当前页面的pdf形式。在pdf文件下载过程中出…...

c# 使用OpenCV

C#和OpenCV的结合主要通过一个名为OpenCVSharp的库实现。OpenCVSharp是一个C#包装器&#xff0c;它提供了对OpenCV&#xff08;一个开源的计算机视觉和机器学习库&#xff09;功能的访问。 安装OpenCVSharp NuGet包&#xff1a; 在Visual Studio中&#xff0c;右键点击你的项目…...

数据库连接问题 - ChatGPT对自身的定位

1.一段关于数据库连接的技术性对话 sweetie&#xff0c;连接数据库的时候&#xff0c;需要在每次读写数据后就把连接释放吗&#xff1f; 亲爱的&#xff0c;连接数据库后&#xff0c;通常会在每次读写数据后将连接释放。这是为了确保数据库连接的及时释放和有效管理。如果不及…...

Java高频面试题(十四):Nginx高性能反向代理服务器解析

Nginx Nginx是什么 Nginx是一个高性能的基于HTTP的反向代理的服务器,也是基于SMTP和POP3的邮件服务器。其主要功能就类似于Tomcat,对外提供资源共享。 反向代理 是指以代理服务器来接收客户端请求,然后将请求转发给内部网络上的服务器(如多个spring boot后端服务或微服务)…...

突破AI推理瓶颈:Ivy混合精度技术如何平衡速度与精度

突破AI推理瓶颈&#xff1a;Ivy混合精度技术如何平衡速度与精度 【免费下载链接】ivy unifyai/ivy: 是一个基于 Python 的人工智能库&#xff0c;支持多种人工智能算法和工具。该项目提供了一个简单易用的人工智能库&#xff0c;可以方便地实现各种人工智能算法的训练和推理&am…...

Chord视频分析完整指南:抽帧策略、分辨率限制、显存保护机制全说明

Chord视频分析完整指南&#xff1a;抽帧策略、分辨率限制、显存保护机制全说明 1. 引言&#xff1a;为什么需要本地智能视频分析&#xff1f; 想象一下&#xff0c;你有一段视频&#xff0c;想知道里面发生了什么&#xff0c;或者想找到某个特定的人或物在视频的哪个位置、哪…...

伏羲天气预报气象服务升级:地市级气象台低成本部署AI预报辅助决策系统

伏羲天气预报气象服务升级&#xff1a;地市级气象台低成本部署AI预报辅助决策系统 1. 系统概述与核心价值 伏羲天气预报系统&#xff08;FuXi&#xff09;是复旦大学研发的15天全球天气预报级联机器学习系统&#xff0c;基于Nature npj Climate and Atmospheric Science发表的…...

使用Python进行简单编程

实验一&#xff1a;&#xff08;1&#xff09;交互式&#xff1a;&#xff08;2&#xff09;文件式&#xff1a;实验2 &#xff08;1&#xff09;交互式&#xff08;2&#xff09;文件式实验3&#xff08;1&#xff09;交互式(2)文件式实验4&#xff08;1)文件式交互式…...

Mirage Flow 在网络安全领域的应用:智能威胁分析与日志处理

Mirage Flow 在网络安全领域的应用&#xff1a;智能威胁分析与日志处理 每天&#xff0c;安全运维中心的工程师们都要面对海量的告警日志&#xff0c;从成千上万条信息中寻找那几条真正危险的攻击线索&#xff0c;就像大海捞针。传统的规则引擎和静态分析工具虽然能过滤掉大量…...

Meta-Llama-3-8B-Instruct保姆级部署教程:5分钟在3060显卡上跑通AI对话

Meta-Llama-3-8B-Instruct保姆级部署教程&#xff1a;5分钟在3060显卡上跑通AI对话 1. 引言 1.1 为什么选择Meta-Llama-3-8B-Instruct 如果你正在寻找一个能在消费级显卡上流畅运行的AI对话模型&#xff0c;Meta-Llama-3-8B-Instruct绝对值得考虑。这个80亿参数的模型专为指…...

保护敏感信息:为什么选择本地运行的MedGemma 1.5医疗AI?

保护敏感信息&#xff1a;为什么选择本地运行的MedGemma 1.5医疗AI&#xff1f; 1. 医疗数据隐私的严峻挑战 在数字化医疗时代&#xff0c;我们的健康数据比以往任何时候都更容易被收集和传播。每次在线医疗咨询、症状搜索或健康App使用&#xff0c;都可能让敏感的健康信息暴…...

ECharts树形图实战:5分钟搞定企业组织架构可视化(附完整代码)

ECharts树形图实战&#xff1a;5分钟搞定企业组织架构可视化&#xff08;附完整代码&#xff09; 当企业规模扩大时&#xff0c;组织架构的复杂性往往呈指数级增长。传统的静态图表或PPT已经难以满足实时更新、动态展示的需求。ECharts作为一款强大的数据可视化库&#xff0c;其…...

CYBER-VISION零号协议生成高质量LaTeX文档与数学公式

CYBER-VISION零号协议生成高质量LaTeX文档与数学公式 写论文&#xff0c;尤其是理工科论文&#xff0c;最头疼的是什么&#xff1f;对我来说&#xff0c;不是想不出创新点&#xff0c;而是跟LaTeX较劲。调格式、排公式、处理参考文献&#xff0c;这些繁琐的细节常常打断思路&a…...