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

时间:2011-04-24 17:06:13

标签: c++

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

_iterator_debug_level value '0' doesn't match value '2;

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

2 个答案:

答案 0 :(得分:11)

如果要分发其他人可以在发布或调试模式下使用的发布库,您需要做两件事:

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

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

答案 1 :(得分:2)

看起来您的调试二进制文件和您下载的库使用不兼容的迭代器调试模式。迭代器调试通常由宏控制。根据宏值,可以更改交互器和许多其他对象的大小。你很幸运,你的程序发出了有用的错误信息,而不是简单地粉碎。

检查库文档并确保您的项目使用相同的迭代器调试模式。您也可以尝试在发布模式下重新编译库。如果这没有帮助,您将不得不在调试模式下重新编译库,即使您不打算调试库本身。