基于VS平台的库生成与使用

2023-11-08

基于VS平台的库生成与使用

动态库的创建连接参考链接:https://www.cnblogs.com/codingmengmeng/p/6287425.html
静态库的创建连接参考链接:https://www.cnblogs.com/zqh20145320/p/6772985.html
静态库&动态库参考链接:https://blog.csdn.net/roy_xing/article/details/90372477

动态库创建与使用:

创建动态库:
1.创建win32项目,应用程序设置为DLL类型
2.添加新项:.h文件和.cpp文件
3.生成解决方案,生成了.dll文件和.lib文件

使用创建的动态库:
1.新建win32控制台应用程序
2.创建一个名为lib的文件夹,将动态库中的.lib文件拷贝过来
3.将动态库中的.dll文件放进debug文件夹中
4.配置:配置好头文件的位置(见包含目录)、引导库位置(见库目录)及其名字(见附 加依赖项)
5.配置完成,运行即可。

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
附加依赖项添加的是.lib而不是.dll,若生成了DLL,则肯定也生成了LIB文件。

.h .lib .dll三者的关系:
H文件的作用:声明函数接口
DLL文件作用:函数可执行代码
LIB文件作用:附加依赖项.LIB文件,它起到桥梁的作用。当 我们在自己的程序中引用了一个H文件里的函数,链接器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用了。它告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,

静态库创建与使用:

创建静态库:
1.创建win32项目,应用程序设置为静态类型
2.添加新项:.h文件和.cpp文件
3.生成解决方案,生成了.dll文件和.lib文件

使用创建的静态库:
1.创建w32控制台应用程序。
2.将创建静态库工程中的头文件(.h)文件和静态库.lib文件拷到我们刚刚创建的这个w32应用程序工程文件目录下。
3.右键 “目录” “属性” 选择 “链接器” -> “输入”,在“附加依赖项” 这里添加要调用的lib文件的名字:例如XXX.lib

在VC中加载LIB文件的几种方法:
LIB文件直接加入到工程文件列表中 :
  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。
设置工程的 Project Settings来加载DLL的LIB文件。
通过程序代码的方式 :
  加入预编译指令 #pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令。
 
  链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;
  在Release方式下,产生的LIB文件是Release版本,如Regr.lib。
  当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。

何为静态库、静态链接:
  静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接

动态链接库的优缺点:
  因为动态链接库是将功能封装在一起的模块,因此,与将代码直接写入调用模块中相比,它不仅可以提高程序的复用,减少代码开发工作量,同时使得功能更新更方便。除了这些模块化带来的优点外,动态链接库的工作方式也决定了它先天具有比静态链接更多的优点,如下所述。
1、节约内存和减少交换:当应用程序使用动态链接时,多个进程可以同步使用一个DLL共享内存中DLL的单个副本。相比之下,当应用程序使用静态链接库时,Windows必须为每个应用程序装载一个库代码的副本到内存中。
2、节约磁盘空间:当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本。相比之下,当应用程序使用静态链接库时,每个应用程序要将库代码作为独立的副本链接到可执行镜像中。
3、当DLL中的函数修改时,只要函数参数、调用规定和返回值没有改变,使用DLL的应用程序不需要重新编译或链接。而静态链接的函数改变时,需要应用程序重新链接。
4、支持多语言编程:只要应用程序遵循相同的调用规范,则使用不同编程语言编写的程序可以调用相同的DLL函数。程序和DLL函数必须兼容:函数定义的参数入栈顺序,函数或应用程序谁来负责清理堆栈,参数是否传入寄存器中等方面必须兼容。
5、轻松的创建中间版本:通过将资源放入DLL中,使得创建应用程序的中间版本非常简单。如可以将应用程序的每个语言版本的字符串放到单独的一个资源DLL中,并为不同的语言版本装载合适的资源DLL就可以了。
虽然使用DLL有诸多的优点,但是也需要格外注意使用DLL的缺点。即调用DLL的应用程序不是独立的,程序的 运行依赖于所使用的DLL是否存在。

静态库的优缺点:
1.空间浪费是静态库的一个问题。
2.另一个问题是静态库对程序的更新、部署带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户 。

静态库和动态库的区别:
1.静态库在程序编译时会链接到目标代码中,程序运行时不需要静态库,因为体积比较大。而且每次编译时都需要载入静态代码,因此开销大。
2.动态库在程序编译时不会被链接到目标代码中,而是在程序运行时才被载入,程序运行时需要动态库存在,因此体积比较小。而且系统只需要载入一次动态库,不同程序可以得到内存中相同的动态库副本,因此内存开销小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于VS平台的库生成与使用 的相关文章

  • visual studio 代码格式化的若干方法(含快捷键)

    Microsoft Visual Studio Community 2019 16 11 19 方法一 快捷键 选中内容 gt ctrl k ctrl f 方法二 工具栏 选中内容 gt 编辑 gt 高级 gt 设置选定内容的格式
  • Linux常用操作命令

    1 ls 列出当前目录中的文件 2 pwd 列出当前目录的绝对路径 3 cd 切换当前目录 4 touch 创建空文件 5 cat 读取文件 6 echo 写文件 7 mkdir 创建目录 文件夹 make directory 8 rm 删
  • IDE0006 加载项目时遇到了错误,已禁用了某些项目功能,例如用于失败项目和依赖于失败项目的其他项目的完整解决方案分析。

    重新打开vs2017就好了 原因猜测 vs来大姨妈了 现象是catch ex 后面是e message 单纯少个x vs没检测出来 辛辛苦苦搜个半天 可能太依赖vs了 懒人专属编辑器
  • 01 LNK2038:检测到“RuntimeLibrary”的不匹配项

    LNK2038 检测到 RuntimeLibrary 的不匹配项 问题描述 error LNK2038 检测到 RuntimeLibrary 的不匹配项 解决方法 qtmian lib报错采用方法3解决 方法1 修改VS项目运行库配置 方法
  • 【msvcp100.dll下载】msvcp100.dll丢失修复

    遇到因msvcp100 dll文件丢失而无法正常运行软件或游戏程序的朋友 不用担心 根据小编整理的教程文章 将dll文件放在操作系统system32文件夹的适当位置可以解决这个问题 具体该如何操作呢 只需下载指定的dll文件即可提醒缺少哪个
  • 在VS2015中让UnityShader脚本关键词高亮

    在写Unity中的shaderlab时 习惯了VS的同志们 想实现在VS2012 2015中显示Shader 关键字高亮 这里有一个方法 效果如图 这需要一个工具 在我的资源里面 http download csdn net detail
  • 14.C++之对象的初始化和清理

    学习目标 学习内容 1 对象的初始化和清理 在C 中 每个对象也都会有初始设置以及 对象销毁前的清理数据的设置 今天介绍两种函数 构造函数和析构函数 来完成对象的初始化和清理 构造函数 主要用于为对象的成员属性赋值 又编译器自动完成 无须手
  • C语言 在数组中找到和值为目标值的两个元素

    输入你的目标值target 就能找到相加为target的两个数了 自己输入一个数组 并且设定一个目标值 target 就能在数组中找到两个相加等于target的元素了 include
  • VS2019安装Qt插件教程,发现下载不了问题解决

    1 打开VS 最上方工具栏中点击扩展窗口 选择管理扩展 2 在右边搜索中搜索qt出现以下界面 这时可能出现问题 再点击下载发现迟迟下载不了 或者是下载到一定地步后无法下载 再或者是下载完成后安装无反应 解决办法 点击有点的详细信息或者进入如
  • VS2019实用调试技巧

    VS2019实用调试技巧 1 debug和release的区别 2 调试 1 调试最常使用的几个快捷键 2 用监视窗口查看临时变量的值 3 查看内存信息 4 查看调用堆栈 5 查看汇编信息 6 查看寄存器信息 3 如何写出易于调试 好的代码
  • 如何创建一个Windows软件

    很久以前我创造了一个Windows软件 我今天把这个方法分享给大家 我的系统 Edition Windows 11 Pro Insider Preview Version 22H2 Installed on 7 30 2022 OS bui
  • Visual Studio 创建DLL 、LIB及调用

    一 前言 在工程中 经常会根据不同的场景需求将类封装成库文件 以供他人使用 那么如何利用VS进行库 动态库 的生成呢 以下简要演示实现过程 开发环境 VS2019 二 生成DLL动态库 1 创建控制台工程 添加类库函数 2 添加函数代码 d
  • 缺少msvcp120.dll、msvcr120.dll解决办法

    缺少msvcp120 dll msvcr120 dll解决办法 丢失或缺少msvcp120 dll msvcr120 dll等这些报错是因为我们没有安装vc 运行库 看一下报错对应的数字对应的版本 msvcp msvcr60 71和80 d
  • 在Visual studio 2019中创建Qt+OpenCv项目

    一般创建Qt项目 都会第一时间想到Qt creator 这个IDE确实好用 可自由选择编译器 mingw或Visual studio 但要同时结合OpenCv框架 整个配置过程太繁琐了 好像需要用到Cmake工具 综合考虑了一下 在Visu
  • VisualStudio代码片段管理

    文章目录 前言 1 查看代码片段 2 插入代码片段方式 3 使用扩展创建代码片段 3 1 安装VS2019的扩展 3 2 使用扩展创建代码片段 4 不知为何 VS2022我安装一直有问题 扩展安装成功 但是新建文件没有 Snippet De
  • 轻松解决Visual Studio登陆凭证问题

    很多同学在使用Visual Studio的时候 在试用期过后 需要登陆验证时 往往会登陆不上 出现 无法刷新用户凭证 无法获得信赖 等问题 如图 解决方式 点击账户选项 使用系统Web浏览器
  • VS+QT开发Ocx/ActiveX控件 一

    VS QT开发Ocx ActiveX控件 一 VS QT开发Ocx ActiveX控件 网页中全屏 二 QT开发ActiveX控件 一 所用IDE版本 需用管理员权限 二 创建ActiveX 三 qt desinger 四 regsvr32
  • Visual Studio 将json转换为实体类

    先复制你的json文本然后
  • 使用Visual Studio创建第一个C代码工程

    文章目录 2019创建C工程 创建C文件 运行 上一节我们使用记事本编辑C代码 在命令行运行文件 这种方式只是作为对编译器的了解 实际的开发中一般使用集成开发环境比较多 因为 集成开发环境 操作比较简单 通常可编辑 具有明显错误的提示图标
  • 界面控件DevExpress WPF Dock组件,轻松创建类Visual Studio窗口界面!

    本文主要为大家介绍 DevExpress WPF 控件中的Dock组件 它能帮助用户轻松创还能受Microsoft Visual Studio启发的Dock窗口界面 P S DevExpress WPF拥有120 个控件和库 将帮助您交付满

随机推荐

  • 线性代数——矩阵的初等变换

    矩阵的初等变换 矩阵的初等变换分为初等行变换和初等列变换 初等变换矩阵与矩阵之间用箭头连接 不能用等号 初等行变换 交换两行 用k k 0 乘以某一行 某一行的1倍加到某一行上去 定理1 任何矩阵都可通过初等变换化为标准形 行变换和列变换都
  • eclipse实用配置

    在eclipse打开当前文件在本地电脑中所在的路径配置 Run gt External Tools gt External Tools Configurations new 一个 program location 里面填 C WINDOWS
  • 一文带你从零到一深入透析 @RefreshScope 结合 Nacos 动态刷新源码

    嗨 您好 我是 vnjohn 在互联网企业担任 Java 开发 CSDN 优质创作者 推荐专栏 Spring MySQL Nacos Java 后续其他专栏会持续优化更新迭代 文章所在专栏 Nacos 我当前正在学习微服务领域 云原生领域
  • 学生php实训个人总结300字,实训总结300字通用版5篇

    导语 实训目的要明确 在理论上验证定理 公式 算法 并使实验者获得深刻和系统的理解 在实践上 掌握使用实验设备的技能技巧和程序的调试方法 一般需说明是验证型实验还是设计型实验 是创新型实验还是综合型实验 无忧考网为大家整理的实训总结300字
  • 使用 AWK 去掉文本文档中的空白行

    在 Linux 操作系统中 可以使用 AWK 命令高效地处理文本文档 AWK 命令通过执行使用 AWK 语言编写的脚本程序 处理文本文档 AWK 脚本程序是由模式 patterns 与相关操作 corresponding actions 组
  • 基于空间平滑MUSIC算法的相干信号DOA估计(2)

    空间平滑MUSIC算法 2 继续上一篇博客 继续讲后向空间平滑和前 后向空间平滑MUSIC算法 基于空间平滑MUSIC算法的相干信号DOA估计 1 2 3 后向空间平滑算法 后向空间平滑更准确的说是共轭后向空间平滑 它是对后向子阵列地共轭接
  • mysql数据库用户管理和权限控制

    文章目录 1 用户管理 1 1 查询用户 1 2 创建用户 1 3 修改用户密码 1 4 删除用户 2 权限控制 2 1 查询用户权限 2 2 授予权限 2 3 取消权限 2 4 多个权限用逗号隔开 1 用户管理 1 1 查询用户 USE
  • 【转】在 Bash 中使用 -exec 选项和 find 命令搜索文件

    转自 https www delftstack com zh howto linux linux find exec 我们可以使用带有 exec 选项的 find 命令来查找包含我们要搜索的文本的文件 主要概念是使用 find 命令获取工作
  • 关于HTML页面跳转的5种方法分享。

    转自 微点阅读 https www weidianyuedu com 五个例子来详细说明 这几个例子的主要功能是 在5秒后 自动跳转到同目录下的hello html 根据自己需要自行修改 文件 1 html的实现 1 2 3 4 5 6
  • TCP的Ack和Seq和len的关系

    详细可以看 不抓包 如何学得了 TCP这篇文章 关系 发送数据包 数据的序号Seq和数据的长度Len 发送seq len 确认包 Ack 收到的数据包的序号Seq Len ack seq len 发送数据包的
  • 十大排序算法

    十大排序对比表格 中文名称 英文名称 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 选择排序 Selection O O O O 1 不稳定 冒泡排序 Bubble O O O O 1 稳定 插入排序 Insertio
  • selenium中隐藏元素如何定位

    1 什么是隐藏元素 前端通过一些属性来控制元素隐藏 type hidden style display none margin设为负值 z index控制元素堆叠顺序 2 定位隐藏元素 定位隐藏元素与定位普通元素没什么区别 from sel
  • ActiveMQ 反序列化漏洞(CVE-2015-5254)漏洞复现vulhub

    ActiveMQ 反序列化漏洞 CVE 2015 5254 Apache ActiveMQ是美国阿帕奇 Apache 软件基金会所研发的一套开源的消息中间件 它支持Java消息服务 集群 Spring Framework等 Apache A
  • 从工具了解大数据之Kettle

    最近沉迷Python爬虫学习 很有意思 即时刹车 坚持一步一学习 一步一整理 Kettle目前工作用于数据库搬运 例如Oracle定时搬运到mysql中间表 以便于加速查询 1 相关学习资料 尚硅谷 大数据技术之Kettle视频教程 网盘资
  • /libcublas.so.11: symbol cublasLtHSHMatmulAlgoInit version libcublasLt.so.11 not defined in file lib

    GLUE root cd163c5c74c9 cd root miniconda3 GLUE root cd163c5c74c9 miniconda3 ls LICENSE txt bin compiler compat conda met
  • Aruba为边缘赋“能”

    点击上方关注我们 我们不断重复着 万物互联 万物智能 那些曾在电影中多次出现的带有科幻意味的 智能 今天已经在生活中变成现实 而我们似乎已经对此见怪不怪 我们有充足的理由相信 云 AI 5G 将再次颠覆整个世界 哦 对了 必须再加上一个 边
  • Zotero插件「Better BibTex」实现自定义导出格式

    Better BibTex插件设置 介绍 实现 最近在撰写论文时 由于发现Zotero Better BibTex导出参考文献时 会与Google Scholar上有诸多不一致 引起了很多不必要的麻烦 奈何网上关于如何自定义导出格式的教程寥
  • Python数据分析,学习路径拆解及资源推荐(附详细思维导图)

    关于Python数据分析 其实网上能够找到的学习资源很多 主要分为两类 一类是提供各种资源的推荐 比如书单 教程 以及学习的先后顺序 另一类是提供具体的学习内容 知识点或实际案例 但很多繁琐而又杂乱的内容 除了给初学者增加理解和认识的噪音外
  • Flutter中回调函数

    文章目录 一 前言 二 示例代码 二 函数 三 定义一个函数变量 四 函数回调的写法1 Function 五 函数回调的写法2 typedof 六 函数回调的写法3 系统默认 一 前言 如果对回调函数概念了解的话可以跳过本段内容和第二段内容
  • 基于VS平台的库生成与使用

    基于VS平台的库生成与使用 动态库的创建连接参考链接 https www cnblogs com codingmengmeng p 6287425 html 静态库的创建连接参考链接 https www cnblogs com zqh201