C++动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?
1、现象:
使用一些第三方的dll,比如opencv,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错;同样的道理,jsoncpp库也是。
但是还有一些第三方的dll,比如halcon,只提供给用户release的dll,用户的debug版和release版的exe都可以引用此dll。
如此看来,是有些dll可以混用(交叉引用),有些不可以,两者为什么会存在差异?
2、原因
比如debug的exe调用release编译生成的dll,接口函数的参数如果使用std::vector或者std::string之类的东西,肯定会崩。因为stl在debug和release下实现不同。std::string在debug和release环境中的内存大小是不一致的。 如果混用,编译可以通过,但是exe运行时会出现内存奔溃现象。cv::InputArray也是同样的道理,库混用的话,还没等到exe运行,而是编译就出错。
所以opencv和jsoncpp等等的第三方库,必须严格区分debug和release。
3、结论
不含stl库的debug动态库和release动态库在debug或release项目中都可以使用;
含有stl的debug动态库和release动态库在项目中不能混用,debug项目必须用debug库, release 项目必须用release库 ;
内存谁分配谁释放,动态库导出函数不要用stl,仅使用基本类型或接口;
4、姊妹篇
DLL的灾难 --- DEBUG与RELEASE版本不能交叉调用_libaineu2004的博客-CSDN博客
5、参考文献
dll在debug和release模式下如何交叉引用? - 知乎
封装库: c/c++ debug版本库 和 release 版本库 互用问题_XHW___001的博客-CSDN博客
C++动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?相关推荐
- c++由动态库dll文件生成lib文件的方法
很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...
- 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)
如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...
- vs2019加载调试动态库dll文件
创建一个hello world 的空项目 根据dll文件时多少位的就配多少,然后点击运行 将dll相关的头文件全部拷贝到测试项目中 将dll文件和lib也同时拷在测试文件的cpp同目录下 将编写dll ...
- c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序
引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...
- C#:识别一个dll文件是Debug模式还是Release模式编译的
2019独角兽企业重金招聘Python工程师标准>>> 今天遇到一个问题,就是在要确定一个C#项目中正在使用的一个dll文件是什么模式编译的.因为Debug和Release两种模式编 ...
- java 项目加载dll文件,Java动态调用链接库dll文件
Java动态调用链接库dll文件 Java动态调用链接库dll文件 因为项目需要,用到了java调用dll文件中的方法.写成dll文件大多是用C语言弄成的,对于我这个纯粹干java的人员来说,着实让我 ...
- C# VC6调用VC6的动态库DLL
C# VC6调用VC6的动态库DLL 一 VC创建动态库 1. DLL的创建 启动VC6.0, 新建一个"Win32 Dynamic-Link Library"工程,选择" ...
- 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )
文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...
- cmake导入so库_通过CMake方式生成动态库so文件
JNITest 通过CMake方式生成动态库so文件 简介 Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C.C++等本地代码所封装的 ...
最新文章
- DuiLib——xml节点元素属性介绍
- Cannot find module -----Node.js编程的第一个问题
- calibre for linux,calibre - 
下载Linux版
- JSP Unable to compile class for JSP
- mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
- Android开发笔记(三十八)列表类视图
- Hive-1.2.0学习笔记(四)Hive表管理
- python简单的爬虫实例
- 压力焊2021年焊工作业考试题库
- Js-Html转文本
- linux中PATH环境变量的作用和使用方法
- 物联网智能家居与射频识别技术应用
- ios 系统状态栏样式修改_IOS修改状态栏的字体颜色以及修改状态栏的背景颜色...
- 计算机文档怎么字符加宽间距,Word2013设置字符间距,如何设置两个字符之间的距离 -电脑资料...
- JAVA异常:java.lang.AbstractMethodError: ...tomcat.websocket.server.WsSessionListener.sessionCreated
- 云ERP的创新到底在哪?
- 送你一招超级快速网站,系统搬家教程,上百G内容的网站快速搬家---快速服务器搬家记录-不同IDC服务商的大文件服务器搬家支招-一颗优雅草科技伊凡
- 椭圆形方程的差分解法
- 常见开发语言擅长领域
- AV1硬件采用及未来发展
热门文章
- 有限状态机详解(转载)
- 苹果用户如何1:10充值微信豆
- Cocos Creator 2D Effect 入门 (1)
- apple iMac一体机 装双系统 实战! (Apple +Win 7 64bit)Good
- 网约车大战重来:易到回归降佣金,美团入局每单补贴超20元
- SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt
- xp无法访问win7计算机提示无权限,ghost xp访问win7共享无权限怎么解决
- 13.3断流_BUG全军覆没!苹果iOS13.3正式推送:4G断流、后台闪退统统解决
- 尺规虽设,犹奈“度”何
- 从视频中获取关键帧(I帧)