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版本是否可以混用(交叉用)?相关推荐

  1. c++由动态库dll文件生成lib文件的方法

    很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...

  2. 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)

    如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...

  3. vs2019加载调试动态库dll文件

    创建一个hello world 的空项目 根据dll文件时多少位的就配多少,然后点击运行 将dll相关的头文件全部拷贝到测试项目中 将dll文件和lib也同时拷在测试文件的cpp同目录下 将编写dll ...

  4. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序

    引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...

  5. C#:识别一个dll文件是Debug模式还是Release模式编译的

    2019独角兽企业重金招聘Python工程师标准>>> 今天遇到一个问题,就是在要确定一个C#项目中正在使用的一个dll文件是什么模式编译的.因为Debug和Release两种模式编 ...

  6. java 项目加载dll文件,Java动态调用链接库dll文件

    Java动态调用链接库dll文件 Java动态调用链接库dll文件 因为项目需要,用到了java调用dll文件中的方法.写成dll文件大多是用C语言弄成的,对于我这个纯粹干java的人员来说,着实让我 ...

  7. C# VC6调用VC6的动态库DLL

    C# VC6调用VC6的动态库DLL 一 VC创建动态库 1. DLL的创建 启动VC6.0, 新建一个"Win32 Dynamic-Link Library"工程,选择" ...

  8. 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )

    文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...

  9. cmake导入so库_通过CMake方式生成动态库so文件

    JNITest 通过CMake方式生成动态库so文件 简介 Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C.C++等本地代码所封装的 ...

最新文章

  1. DuiLib——xml节点元素属性介绍
  2. Cannot find module -----Node.js编程的第一个问题
  3. calibre for linux,calibre - 下载Linux版
  4. JSP Unable to compile class for JSP
  5. mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
  6. Android开发笔记(三十八)列表类视图
  7. Hive-1.2.0学习笔记(四)Hive表管理
  8. python简单的爬虫实例
  9. 压力焊2021年焊工作业考试题库
  10. Js-Html转文本
  11. linux中PATH环境变量的作用和使用方法
  12. 物联网智能家居与射频识别技术应用
  13. ios 系统状态栏样式修改_IOS修改状态栏的字体颜色以及修改状态栏的背景颜色...
  14. 计算机文档怎么字符加宽间距,Word2013设置字符间距,如何设置两个字符之间的距离 -电脑资料...
  15. JAVA异常:java.lang.AbstractMethodError: ...tomcat.websocket.server.WsSessionListener.sessionCreated
  16. 云ERP的创新到底在哪?
  17. 送你一招超级快速网站,系统搬家教程,上百G内容的网站快速搬家---快速服务器搬家记录-不同IDC服务商的大文件服务器搬家支招-一颗优雅草科技伊凡
  18. 椭圆形方程的差分解法
  19. 常见开发语言擅长领域
  20. AV1硬件采用及未来发展

热门文章

  1. 有限状态机详解(转载)
  2. 苹果用户如何1:10充值微信豆
  3. Cocos Creator 2D Effect 入门 (1)
  4. apple iMac一体机 装双系统 实战! (Apple +Win 7 64bit)Good
  5. 网约车大战重来:易到回归降佣金,美团入局每单补贴超20元
  6. SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt
  7. xp无法访问win7计算机提示无权限,ghost xp访问win7共享无权限怎么解决
  8. 13.3断流_BUG全军覆没!苹果iOS13.3正式推送:4G断流、后台闪退统统解决
  9. 尺规虽设,犹奈“度”何
  10. 从视频中获取关键帧(I帧)