【发布时间】:2015-01-17 14:55:36
【问题描述】:
在我的应用程序(调试模式)的编译过程中,我收到以下错误,与 CRT 库有关:
16>libcpmt.lib(stdhndlr.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in poStat.obj
根据Microsoft MSDN topic,我需要将运行时库设置为/MTd,以便附加使用调试模式编译的正确库。我还必须定义一个 _DEBUG 标志 - 这正是我所做的。
尽管我已经完成了在调试模式下使用 CRT 所需的一切,但它仍在尝试使用不带调试模式的 CRT(libcpmt.lib 而不是 libcpmtd.lib)。
我该如何解决这个问题?
更新
当我转到C:\Program Files\Microsoft Visual Studio 11.0\VC\lib 并将libcpmtd.lib 的名称更改为libcpmt.lib(必须暂时删除现有的libcpmt.lib)时,它会在调试模式下成功构建。
【问题讨论】:
-
到目前为止,最常见的原因是您正在链接使用 Release 构建设置构建的 .lib。无法混合。
-
@HansPassant 没错。然而,至少据我所知,编译器在设置
/MT[d]选项时会自动链接libcpmt.lib。所以它不可能混合。 -
当然,.lib 文件包含 libcpmt.lib 的特定链接指令,因为它是使用 /MT 构建的。您的代码包含 libcpmtd.lib 的特定链接指令,因为它是使用 /MTd 构建的。世界发生冲突,有人将不得不让步。如果你想调试你的代码,那么它需要是那个库。如果您无法自己重建该库,则需要联系所有者并要求进行调试构建。
-
如何重建
libcpmt.lib?没有这种可能性。我是项目代码的所有者,我可以在发布模式下毫无问题地编译它。 -
值得一提的是,我的项目在 VS 2008 中使用调试模式成功构建,升级到 VS 2012 后问题开始出现。
标签: c++ visual-studio visual-c++ visual-studio-2012