代码之家  ›  专栏  ›  技术社区  ›  steinybot

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

  •  8
  • steinybot  · 技术社区  · 14 年前

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

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

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

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

    5 回复  |  直到 7 年前
        1
  •  5
  •   steinybot    14 年前

    问题是stdafx.cpp的Debug Information Format设置为Program Database(/Zi),而所有其他文件都将其设置为Program Database for Edit and Continue(/Zi)。

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

    我想是升级搞砸了。

        2
  •  4
  •   Martin Ba    8 年前

    我在编译一个 $(ProjectName) 不同的 从项目的实际输出文件(即。 Linker > Output File 未设置为默认值 $(OutDir)\$(ProjectName).exe 但对其他事物,例如。 $(OutDir)\$(ProjectName)-custom_postfix.exe

    在这种情况下,显然 只有 仅在执行重建项目时 vc80.pdb 好像被人看错了。

    帮助我的是额外设置 C/C++ > Output Files > Progam Database File Name $(IntDir)\$(TargetName).pdb . (而不是默认值 )

        3
  •  1
  •   Joe    10 年前

        4
  •  0
  •   Windows programmer    14 年前

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

        5
  •  0
  •   Contango    14 年前

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

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

    错误原因:

    • 此错误的原因是编译.dll项目时,它在 相同的 目录作为.exe目录,当编译.exe项目时,它会立即从.dll项目重写预编译头(*.pch)。

    解决方法:

    • 为了解决这个问题,我将两个子项目的“IntermediateDirectory”都改为“temp”,这样临时文件(包括预编译的头文件)就被写到了不同的目录中。