首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRT库:错误版本

CRT库:错误版本
EN

Stack Overflow用户
提问于 2015-01-17 14:55:36
回答 1查看 374关注 0票数 0

在我的应用程序(调试模式)的编译过程中,我得到了与CRT库相关的以下错误:

代码语言:javascript
复制
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)时,它在调试模式下成功构建。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-17 19:01:00

正如Hans已经指出的那样,之所以这样做,是因为您正在链接的一些.lib或.obj文件是用发行版设置编译的,还有一些是用Debug编译的。现在真正的问题是如何找到需要修复的库或对象文件。这里有一种方法

代码语言:javascript
复制
link /dump /all "Path_To_Lib_or_Obj" | findstr /L "\/DEFAULTLIB"

这将打印出所有默认库,包括CRT。必须对链接器构建命令中出现的每个.lib和.obj执行此命令。对于Debug,您应该看到如下内容:

代码语言:javascript
复制
/DEFAULTLIB:msvcprtd
/DEFAULTLIB:MSVCRTD
/DEFAULTLIB:OLDNAMES
...

并释放:

代码语言:javascript
复制
/DEFAULTLIB:msvcprt
/DEFAULTLIB:MSVCRT
/DEFAULTLIB:OLDNAMES
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28000679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档