C++使用我的调试版本链接发布内置库

ter*_*hau 12 c++

我已经下载了第三方库,并在'release'模式下构建了.lib文件.将lib添加到我的项目后,如果我在发布模式下运行我的项目,那很好.但如果我在调试模式下运行我的项目,我会收到一个错误:

_iterator_debug_level value '0' doesn't match value '2;
Run Code Online (Sandbox Code Playgroud)

我可以在调试模式下重建库,但我不认为我需要调试库本身?我已经下载了预先构建的第三方库,之前只有一个版本构建(我假设?),无论我的项目是在调试还是发布,它都能很好地链接.我想知道如何做到这一点.

Ben*_*igt 12

如果要分发其他人可以在发布或调试模式下使用的发布库,则需要执行以下两项操作:

  • 构建DLL,以便获得自己的C运行时库副本
  • 不跨库边界共享CRT资源,例如堆.C代码最重要的是动态分配的内存必须在边界的同一侧解除分配.对于C++代码,您可以std在DLL中使用命名空间,但不能跨越边界传递这些对象.

这就是预先构建的第三方库最有可能完成的事情.仅当外部接口不共享CRT对象时,才能对库执行相同的操作.或者,您可以将单独的发行版和调试版构建为静态库.

  • @SachinJoseph:这是库在调试和发布之间不同的方式之一,但这不是唯一的方式。调试模式下的内存分配器存储额外的信息,例如调用分配函数的位置。可能还有其他事情。 (2认同)