gpt4 book ai didi

c++ - 混合调试和发布库/二进制文件 - 不好的做法?

转载 作者:IT老高 更新时间:2023-10-28 13:00:02 24 4
gpt4 key购买 nike

在调试二进制文件中使用 3rd 方库的发布版本是一种不好的做法吗?

我正在使用第 3 方库并编译了发布 .lib 库。我的 exe 处于 Debug模式开发。然后我得到了:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in test1.obj

经过一番谷歌搜索后,我发现这是因为我试图将发布与调试混合在一起,我可能应该在 Debug模式下编译库,否则会混淆 _ITERATOR_DEBUG_LEVEL 宏。但我只是好奇这是否是推荐的方式以及为什么。我需要为我打算使用的每个 3rd 方库编译并记录发布和调试二进制文件,这似乎很麻烦,这很快就会很多,同时无意调试这些代码。

最佳答案

混合调试和发布代码是不好的做法。问题在于,不同的版本可能取决于 C++ 运行时库的不同基本部分,例如内存分配方式、迭代器等结构可能不同,可能会生成额外代码来执行操作(例如检查迭代器)。

这与混合使用任何其他不同设置构建的库文件相同。想象一个头文件包含应用程序和库都使用的结构的情况。该库是用结构打包和对齐设置为一个值构建的,而应用程序是用另一个值构建的。无法保证将结构从应用程序传递到库中会起作用,因为它们的大小和成员位置可能会有所不同。

是否可以将您的第 3 方库构建为 DLL?假设任何函数的接口(interface)都更干净并且不尝试传递任何 STL 对象,那么您将能够将调试应用程序与发布 DLL 混合使用而不会出现问题。

关于c++ - 混合调试和发布库/二进制文件 - 不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com