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的函数,参数使用vector或者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模式下如何交叉引用? - 知乎

封装库: c/c++ debug版本库 和 release 版本库 互用问题_XHW___001的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/libaineu2004/article/details/125922271
今日推荐