VS2010调试级别不匹配

时间:2010-12-16 22:51:18

标签: c++ visual-studio-2010 linker static-libraries

我在测试我的库时注意到,当项目处于调试模式时,如果我尝试链接到在Release模式下构建的静态库,VS2010将抛出错误。反过来,它看起来是相同的如果我尝试使用在Release中构建的项目链接到Debug中构建的库,就会发生这种情况。

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

有没有办法绕过这种奇怪的行为?我只需分发两个版本的库吗?另外,为什么会发生这种情况呢?

2 个答案:

答案 0 :(得分:1)

这不是一个奇怪的行为,编译器根据宏定义,优化和其他标志创建不同的图像。最好不要分发静态库,因为用户必须具有完全相同的编译器版本,标准库版本,相同的编译器标志或您存在不兼容的风险:有时您会遇到链接错误,有时应用程序会崩溃,有时它会表现不正确

答案 1 :(得分:1)

图书馆作者没有很好的选择来指出混合和匹配不起作用。他们必须触发链接器错误,总是棘手和混乱。这里不起作用的是,您不能将使用STL类的库与启用了禁用代码的迭代器调试混合使用。非常基本的不匹配,那些模板类对象的大小不一样。如果您真的想这样做,那么您将必须禁用从该功能获得的诊断。

这需要使用_HAS_ITERATOR_DEBUGGING宏#defined为0来构建代码的调试版本。确定要执行此操作吗?