【c语言】组件化打包—动态链接库dll

news2024/11/18 20:27:49

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

静态库lib知识点:组件化打包—静态库lib


目录

  • 一、引入动态链接库dll
  • 二、创建动态链接库
    • 1.复制组件化文件
    • 2.创建dll项目
    • 3.添加特殊关键字
    • 4.生成dll文件
  • 三、使用(测试)dll文件
  • 1.复制dll和lib文件
    • 调试执行:
  • 动态链接库总结

一、引入动态链接库dll

静态库:

  • 移植方便

  • 文件体积大
  • 空间浪费
  • 不易更新

将组件化打包位静态库的过程:编译好的目标文件,通过编号、索引、压缩打包为静态库文件lib
在其他的项目中添加打包好的静态库文件,就可以直接使用其中的函数

但是静态库存在浪费空间的问题,并且静态库对程序的更新、部署和发布页会带来麻烦

如果静态库libxx.lib更新,所有使用它的应用程序都需要重新编译,用户也要重新下载程序文件

因此有一种弥补静态库缺点的——动态链接库

在这里插入图片描述

二、创建动态链接库

1.复制组件化文件

在这里插入图片描述

2.创建dll项目

在这里插入图片描述

在这里插入图片描述

3.添加特殊关键字

在每个函数声明的前面添加一个关键字:

_declspec(dllexport)

在这里插入图片描述

添加头文件:

在这里插入图片描述

4.生成dll文件

在这里插入图片描述

在这里插入图片描述

打包好后就可以在项目文件夹下的debug文件夹中查看:

在这里插入图片描述

三、使用(测试)dll文件

1.复制dll和lib文件

创建一个测试项目后,将打包好的dll和lib文件复制到项目文件夹下(还有arrays.h文件)

在这里插入图片描述

在vs中显示所有文件可以查看到动态链接库文件dll和静态库文件lib

在这里插入图片描述

调试执行:

添加头文件:

#include “arrays.h”

添加库目录:

#pragma comment(lib,“DllArray.lib”)

在这里插入图片描述

动态链接库总结

  • 动态库把对一些库函数的链接载入推迟到程序运行的时期

  • 可以实现进程之间的资源共享(因此动态库也称为共享库)

  • 将一些程序升级变得简单

  • 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)

静态库lib知识点:组件化打包—静态库lib

在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

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

相关文章

Qt创建多线程的两种方法

Qt创建多线程的两种方法 [1] Qt创建多线程的两种方法1.摘要2.Qt多线程方法1 继承QThread2.1写一个继承于QThread的线程2.2 QThread的几个函数quit、exit、terminate函数2.3 正确的终止一个线程2.4 如何正确启动一个线程2.5 继承QThread的一些总结 Qt使用多线程的一些心得——2.…

什么是边缘计算盒子?边缘计算盒子可以做什么?一文带你了解边缘计算云服务器 ECS

上文&#xff0c;我们已经为大家介绍了什么是边缘计算、边缘计算的诞生、以及边缘计算与CDN之间的关系&#xff0c;感兴趣的小伙伴欢迎阅读以往文章&#xff1a; 边缘计算节点是啥&#xff1f;边缘计算与CDN有什么关系&#xff1f;一文带你了解边缘计算节点BEC&#xff08;1&am…

在线PS软件有哪些不错的推荐

许多新的UI设计合作伙伴非常关心在线ps工具的选择。现在市场上有各种各样的ps网页替代工具&#xff0c;数量众多&#xff0c;令人眼花缭乱。本文简要介绍了10个在线PS工具&#xff0c;我相信一定有一个适合你&#xff01; 1.即时设计 即时设计是一款在线 UI 设计工具&#xf…

渗透测试--5.1.Crunch创建密码字典

目录 1.crunch简介 2.常用命令 3.使用实例 &#xff08;1&#xff09;.生成字母组合 &#xff08;2&#xff09;. 生成缺位的手机号码 &#xff08;3&#xff09;.生成pass01-pass99所有组合 &#xff08;4&#xff09;.生成六位密码&#xff0c;其中前四位为pass&#xf…

docker-compose部署开发环境

docker-compose部署开发环境 部署nginx欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义…

Java内部类与匿名类

内部类 定义&#xff1a; 一个类的内部又完整的嵌套了另一个类结构&#xff0c;被嵌套的类就被我们称为内部类&#xff0c;嵌套内部类的类被我们称为外部类 //外部类 class Outer {//内部类class Inner{} }package Innerclass;//外部其他类 public class c1 { }class Outer {/…

数据结构--线段树--洛谷模板线段树1-2

写在前面&#xff1a; 学习之前需要知道以下内容&#xff1a; 1. 递归 2. 二叉树 文章目录 线段树介绍用途建树修改单点修改区间修改 查询 代码实现。建树更新lazy传递查询优化一下 练习洛谷 P3372 【模板】线段树 1题目描述题解 【模板】线段树 2题目描述题解 线段树 介绍 …

生产流程图怎么制作?思路提供

生产流程图是一种图表&#xff0c;用来展示生产流程中的各个环节及其顺序。这种图表可以帮助企业管理者更好地了解生产过程中的各个环节&#xff0c;从而更好地进行管理和优化。生产流程图通常包括各个生产环节的名称、所需时间、参与人员、设备和工具等信息。 在制作生产流程图…

虚拟机 03 补充 redis的命令

Redis的操作命令&#xff1a; Redis的启动命令&#xff1a;redis-server redis.conf 进入redis的客户端操作命令&#xff1a;redis-cli -p 6379 退出redis客户端的操作命令&#xff1a;exit或者ctrlc 关闭redis的命令&#xff1a;redis-cli -p 6379 shutdown Redis数据操作命令…

免费优质的网页设计素材网站推荐

找到一个免费优质的网页设计素材网站并不容易。 有些网站要么需要网站的会员&#xff0c;要么设计素材质量差。本文整理总结了10个免费的网页设计材料网站&#xff0c;希望给大家带来一些帮助。 即时设计资源社区 即时设计资源社区是由在线协同设计软件即时设计推出的设计社…

2023乡村振兴三点:粮食安全,数字乡村,特色产业

2023乡村振兴三条&#xff1a;粮食安全&#xff0c;数字乡村&#xff0c;特色产业 人工智能总趋势在减少就业 乡村生活综合服务领域&#xff5e; 可能是以后吸纳劳动力的重要领域 农业现代化最后在实现中… 趣讲大白话&#xff1a;人没事干&#xff0c;咋办 【趣讲信息科技168期…

基于 debian 发行版本的密码设置策略

密码过期时间设置 修改 /etc/login.defs 中的选项 PASS_MAX_DAYS 99999 代表不过期 我们将该值改为 90 密码复杂度设置 需要安装 pam 扩展包 libpam-pwquality 或 libpam-cracklib 。 这里选择安装 libpam-cracklib sudo apt updatesudo apt install libpam-cracklib查看…

虚拟机 03 redis安装和启动服务

redis在linux上的安装&#xff1a; 01.先找到redis的压缩文件 这里的是gz格式的。 02.在linux系统中&#xff0c;先去切换到根目录先 使用命令 cd / 再切换到usr/local/src中 直接把压缩文件拖入到linux系统的命令行中 src文件中会出现redis-5.0.4.tar.gz的文件 03.对这个文…

arm作业

用for循环实现1~100之间的和13BA for(i1;i<100;i) { sum sumi; }

面试7轮,结果对接的HR离职了……

面试鹅厂总共进行了7轮&#xff0c;还没有结果。先是面了三轮&#xff0c;然后hr告诉她没hc了&#xff0c;然后又推荐了另外一个岗位&#xff0c;又面了四轮。然后追问HR后续的进展&#xff0c;她告诉我已经离职了&#xff0c;让我联系另外一个同事。 这么说吧&#xff0c;大厂…

密码学A5算法VHDL设计及仿真验证

A5算法是一种用于GSM(Global System for Mobile Communications)移动通信标准的加密算法。它是一种对称密钥算法,使用一个64位密钥和一个22位帧号作为输入,生成一个228位的伪随机序列,该序列被用于加密语音和数据通信。 A5算法由三个线性反馈移位寄存器(LFSR)组成,每个…

创建一个Go项目

创建一个Go项目 1.创建项目 package mainfunc main() {println("你好啊&#xff0c;简单点了&#xff01;") }如果是本地的话可以采用go run 项目名的方式。 可以采用go run --work 项目名的方式&#xff0c;此时可以展示日志信息。 如果是只编译的话 go build 项…

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…

MATLAB 之 函数文件、特殊形式的函数和程序调试与优化

文章目录 一、函数文件1. 函数文件的基本结构2. 函数调用2.1 函数调用的格式2.2 函数的递归调用2.3 函数参数的可调性2.4 全局变量与局部变量 二、特殊形式的函数1. 子函数2. 内联函数3. 匿名函数 三、程序调试与优化1. 程序调试方法1.1 利用调试函数进行程序测试1.2 利用调试工…

【Linux】多线程概念再理解

文章目录 1. 物理内存与磁盘的关系如何理解物理内存&#xff1f;凭什么物理内存要分为一个个4KB大小&#xff1f;若以块方式存储&#xff0c;则多出的空间是否浪费&#xff1f; 2. 虚拟地址到物理地址的转换3. 缺页中断4. 为什么字符常量区是不允许被修改的&#xff1f;5. 线程…