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

C++创建动态链接库(附原因说明)

C++创建动态链接库(附原因说明)

  • 写在前面
  • 步骤
    • 新建DLL项目
    • 创建一个Cpp控制台引用DLL
    • 如何在任何地方使用你的exe
  • 写在后面

写在前面

在网上看了很多有关C++动态链接库配置的方法,大多数方法都多少有些不同,并且不讲原因,于是我结合各个方法、微软文档、自己的理解总结一下C++创建动态链接库的有效方法。
参考了:
C++生成Lib DLL并使用_哔哩哔哩_bilibili
C++动态链接库(DLL)的创建和调用 - 知乎 (zhihu.com)
C++生成DLL文件(visual studio 2019)面向小白萌新_c++ 生成dll-CSDN博客
理解 __declspec(dllexport)和__declspec(dllimport)-CSDN博客
演练:创建和使用自己的动态链接库 (C++) | Microsoft Learn

步骤

新建DLL项目

命名为MyCppDLL项目
在这里插入图片描述
查看预处理器定义
在这里插入图片描述
发现有个MYCPPDLL_EXPORTS
这个宏就是VS已经帮我们定义好的导出宏,C++要求要使得库中的类or函数被外部引用需要使用导出宏定义库中能被外部引用的类和函数
在这里插入图片描述
在pch.h中定义导出宏,至于为什么要这么定义,可以去看看看看这篇博客

理解 __declspec(dllexport)和__declspec(dllimport)

在这里插入图片描述
创建一个MyClass.h 实现导出类,注意类前一定要加我们刚刚定义的导出宏,不然其他工程文件就无法引用
在这里插入图片描述
在MyClass.cpp中去实现这个类
在这里插入图片描述
生成dll
这是生成的路径
在这里插入图片描述
可以看到生成了.dll、.exp、.lib、pdb这四个文件。我们只需要.dll和.lib,因为dll中存放了库的类和函数而.lib存放了类和函数的入口地址
在这里插入图片描述
接下来,创建一个新文件夹MyDLL,下面再创建两个文件夹,一个lib文件夹,一个include文件夹
将生成的dll和lib放在MyDLL/lib下
在这里插入图片描述
将你的所有头文件放在MyDLL/include文件夹下,这样我们的库就准备好了
在这里插入图片描述

创建一个Cpp控制台引用DLL

创建一个名为RunMyDLL的控制台程序
将你刚刚创建的库文件夹MyDLL拷到RunMyDLL工程目录下(这一步不做也行)
在这里插入图片描述
设置头文件位置,告诉工程第三方库的头文件在哪找
也就是…/MyDLL/include路径
在这里插入图片描述
设置Lib路径,告诉工程第三方库的Lib文件和Dll文件在哪找

也就是…/MyDLL/lib
在这里插入图片描述
设置要引用哪些Lib库,把我们的第三方库的库文件名输入进去,告诉项目我们要使用这个lib
在这里插入图片描述

创建一个cpp文件
写代码,使用第三方库的类Myclass
在这里插入图片描述
生成exe
在这里插入图片描述
这样就完成了

如何在任何地方使用你的exe

将你的第三方库的dl和lib全部放入生成的exe这目录下
在这里插入图片描述
这样你在任何地方都能使用这个exe了
在这里插入图片描述

写在后面

什么时候复刻长离啊
在这里插入图片描述


http://www.kler.cn/a/421817.html

相关文章:

  • 堆叠的简析
  • MySql:理解数据库
  • MATLAB —— 机械臂工作空间,可达性分析
  • 6.824/6.5840(2024)环境配置wsl2+vscode
  • 解决 Flutter Dio合并请求多个接口,如果一个接口500,那么导致其他请求不在执行
  • 如何预防服务器后台爆破攻击
  • 20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题
  • Neo4j APOC-01-图数据库 apoc 插件 windows10 安装
  • web移动端、pc端获取浏览器指纹-fingerprintjs插件(类似mac地址)
  • HDFS怎么查看文件存储位置?
  • 解决爬虫ConnectionResetError出现的问题
  • 力扣第 75 题是 颜色分类
  • 【再谈设计模式】桥接模式 ~ 抽象与实现的灵活桥梁
  • Selenium3+Python如何操作键盘
  • Python的秘密基地--[章节2]Python核心数据结构
  • JDBC入门
  • 深度学习入门课程学习笔记(第23周)
  • SpringBoot 框架下基于 MVC 的高校办公室行政事务管理系统:设计开发全解析
  • 【机器学习】支持向量机SVR、SVC分析简明教程
  • C哈的刷题计划之二维表格数据填充(2)
  • SpringCloud框架学习(第七部分:分布式事务Seata)
  • 产品转后端?2
  • Linux环境下完全卸载、安装Docker以及常用命令
  • Pytest框架学习21--fixture总结
  • 2-2-18-9 QNX系统架构之文件系统(一)
  • 二分搜索(三)x的平方根