Visual c++ 在调试模式下尝试使用VS2010(VC100)的预编译头时,如何消除错误C2859?

Visual c++ 在调试模式下尝试使用VS2010(VC100)的预编译头时,如何消除错误C2859?,visual-c++,visual-studio-2010,debugging,precompiled-headers,Visual C++,Visual Studio 2010,Debugging,Precompiled Headers,我正在尝试升级一个旧的解决方案以使用VS2010(VC100) 我对它进行了设置,以便stdafx.cpp将从stdafx.h创建一个预编译头stdafx.pch。然后,所有其他包含stdafx.h的.cpp文件都被指示使用预编译头 这些帖子帮助我走到了这一步: 现在,当我在发布模式下构建时,一切都很好。但是,当我尝试在调试模式下构建时,会出现一大堆错误,如: 错误1错误C2859:[已删除]\debug\vc100.idb不是创建此预编译头时使用的idb文件,请重新创建预编译头 我相信

我正在尝试升级一个旧的解决方案以使用VS2010(VC100)

我对它进行了设置,以便stdafx.cpp将从stdafx.h创建一个预编译头stdafx.pch。然后,所有其他包含stdafx.h的.cpp文件都被指示使用预编译头

这些帖子帮助我走到了这一步:

现在,当我在发布模式下构建时,一切都很好。但是,当我尝试在调试模式下构建时,会出现一大堆错误,如:

错误1错误C2859:[已删除]\debug\vc100.idb不是创建此预编译头时使用的idb文件,请重新创建预编译头

我相信这个.idb文件是VisualStudio创建的一个中间调试文件

为什么我会犯这个错误?换句话说,为什么它在创建预编译头文件时没有使用这个.idb文件


我不确定您需要什么进一步的信息才能给我答案,所以请询问我是否需要提供更多信息。

也许您的发布版本配置为写入文件[removed]\debug\vc100.idb,而不是[removed]\release\vc100.idb?检查发布版本的项目设置,确保没有类似的硬编码路径组件。

多亏了一位同事,我才得到了答案

问题是stdafx.cpp将调试信息格式设置为Program Database(/Zi),而与所有其他文件一样,stdafx.cpp将其设置为Program Database以进行编辑和继续(/Zi)

将它们全部更改为用于编辑并继续(/ZI)的程序数据库,并进行完整重建,解决了问题


我想是升级搞砸了。

以下是我刚刚在Visual Studio 2008上修复此错误的方法:

背景:

  • 我有一个包含两个子项目的解决方案
  • 一个项目编译.dll
  • 一个项目编译使用此.dll的.exe
  • .exe项目依赖于.dll项目
  • 问题:我让两个项目将其输出转储到同一个目录中,即“OutPutDirectory”和“IntermediateDirectory”都设置为写入根目录“../$(ConfigurationName)”中的公共目录
错误原因:

  • 此错误的原因是编译.dll项目时,它在与.exe目录相同的目录中创建了预编译头(*.pch),而编译.exe项目时,它会立即从.dll项目中重写预编译头(*.pch)
修复方法:

  • 为了解决这个问题,我将这两个子项目的“mediatedirectory”更改为“temp”,以便将临时文件(包括预编译的头文件)写入不同的目录

在stdafx.cpp的属性页中为调试信息格式选择“禁用”,然后返回并选择“继承自为我工作的父项”。

在编译一个项目时,
$(ProjectName)
与项目的实际输出文件不同,我在VS2005中遇到了此错误(即,
链接器>输出文件
未设置为默认值
$(OutDir)\$(ProjectName).exe
,而是设置为其他值,例如
$(OutDir)\$(ProjectName)-自定义后缀.exe

在这种情况下,显然只有在仅执行重建项目时,
vc80.pdb
似乎被错误地查找


帮助我的是将
C/C++>Output Files>program数据库文件名
另外设置为
$(IntDir)\$(TargetName.pdb
(而不是默认的
vc80.pdb

版本生成不会生成idb文件,因为它仅用于调试。因此,为什么版本生成可以工作,而调试无法工作。默认情况下,版本生成不会生成idb文件,但您可以进行配置(很可能是偶然的)感谢它这么做。谢谢我找到了困难的方法lol。这一切都与调试信息格式设置有关。我有一个类似的情况(使用自定义名称,工作正常,然后突然遇到此错误)但解决方案非常简单,只需手动删除输出文件并重新生成。@iX3:删除.pdb文件仅在您尝试重新生成解决方案之前有效。然后它将再次失败,并出现相同的错误。Martin Ba的初始回答为我解决了此问题。