c++ - CRT 库 : wrong version

标签 c++ visual-studio visual-c++ visual-studio-2012

在我的应用程序( 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/

相关文章:

c++ - 交叉编译库通信

c++ - 在 gdb 中跟踪对类实例/内存范围的写访问

c++ - 为 C++ 编写、读取和使用专用数据文件

c++ - 与其他库链接的静态库 - LINKER 警告

c++ - 关于我应该为 Visual Studio 和 Eclipse 使用什么单元测试框架的任何想法(红色代码)

c++ - 如何在 VC++ 2005 中使用 OpenProcessToken、AdjustTokenPrivileges 和 GetExitCodeProcess

c++ - 由 QProcess 启动的嵌套远程进程仍然是僵尸进程

c++ - 仅手动定义部分复制构造函数和赋值运算符

visual-studio - 调试中的 Watch 搜索能力?

visual-studio - 使用/clr 编译的 C++-CLI 库调试 C 可执行文件