[转]动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?

1、现象:

使用一些第三方的dll,比如opencv,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错;

但是还有一些第三方的dll,比如halcon,只提供给用户release的dll,用户的debug版和release版的exe都可以引用此dll。

如此看来,是有些dll可以混用(交叉引用),有些不可以,两者为什么会存在差异?

2、原因

比如debug的exe调用release编译生成的dll,接口函数的参数如果使用std::vector或者std::string之类的东西,肯定会崩。因为stl在release和debug下实现不同。std::string在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博客
————————————————
版权声明:本文为CSDN博主「libaineu2004」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/libaineu2004/article/details/125922271

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值