在我的应用程序(调试模式)的编译过程中,我得到了与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主题,我需要将运行时库设置为/MTd,以便附加使用调试模式编译的正确库。我还必须定义一个_DEBUG标志--这正是我所做的。
尽管我已经完成了使用带有调试模式的CRT所需的一切,但它仍然试图使用没有调试模式的CRT (libcpmt.lib而不是libcpmtd.lib)。
我怎么才能解决这个问题?
更新
当我转到C:\Program Files\Microsoft Visual Studio 11.0\VC\lib并将libcpmtd.lib的名称更改为libcpmt.lib (不得不临时删除现有的libcpmt.lib)时,它在调试模式下成功构建。
发布于 2015-01-17 19:01:00
正如Hans已经指出的那样,之所以这样做,是因为您正在链接的一些.lib或.obj文件是用发行版设置编译的,还有一些是用Debug编译的。现在真正的问题是如何找到需要修复的库或对象文件。这里有一种方法
link /dump /all "Path_To_Lib_or_Obj" | findstr /L "\/DEFAULTLIB"这将打印出所有默认库,包括CRT。必须对链接器构建命令中出现的每个.lib和.obj执行此命令。对于Debug,您应该看到如下内容:
/DEFAULTLIB:msvcprtd
/DEFAULTLIB:MSVCRTD
/DEFAULTLIB:OLDNAMES
...并释放:
/DEFAULTLIB:msvcprt
/DEFAULTLIB:MSVCRT
/DEFAULTLIB:OLDNAMES
...https://stackoverflow.com/questions/28000679
复制相似问题