在我的应用程序( Debug模式)的编译过程中,出现以下与 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模式编译的正确库。我还必须定义一个 _DEBUG
标志 - 这正是我所做的。
即使我已经完成了在 Debug模式下使用 CRT 所需的一切,它仍然试图在没有 Debug模式的情况下使用 CRT(libcpmt.lib
而不是 libcpmtd.lib
)。
我该如何解决这个问题?
更新
当我转到 C:\Program Files\Microsoft Visual Studio 11.0\VC\lib
并将 libcpmtd.lib
的名称更改为 libcpmt .lib
(必须临时删除现有的 libcpmt.lib
)它在 Debug模式下成功构建。
最佳答案
正如 Hans Passant 已经指出的那样,出现这种情况的原因是因为您链接的一些 .lib 或 .obj 文件是使用 Release 设置编译的,而一些是使用 Debug 编译的。现在真正的问题是如何找到需要修复的库或目标文件。这是执行此操作的一种方法
link /dump /all "Path_To_Lib_or_Obj" | findstr /L "\/DEFAULTLIB"
这将打印出所有默认库,包括 CRT。必须为链接器构建命令中出现的每个 .lib 和 .obj 执行此命令。对于调试,您应该看到类似以下内容:
/DEFAULTLIB:msvcprtd
/DEFAULTLIB:MSVCRTD
/DEFAULTLIB:OLDNAMES
...
和发布:
/DEFAULTLIB:msvcprt
/DEFAULTLIB:MSVCRT
/DEFAULTLIB:OLDNAMES
...
关于c++ - CRT 库 : wrong version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000679/