7

我想升級一箇舊的解決方案來使用VS2010(VC100)。如何在調試模式下嘗試在VS2010(VC100)中使用預編譯頭時如何消除錯誤C2859?

我有它的設置,以便stdafx.cpp將從stdafx.h創建預編譯頭stdafx.pch。然後包含stdafx.h的所有其他.cpp文件都被指示使用預編譯頭。

這些職位幫助我走到這一步:

現在,當我建立在釋放模式一切都很好。然而,當我嘗試建立在調試模式下,我得到錯誤的整個堆說:

Error 1 error C2859: [removed]\debug\vc100.idb is not the idb file that was used when this precompiled header was created, recreate the precompiled header.

我相信這.idb文件是由Visual Studio創建的中間調試文件。

爲什麼我會收到此錯誤?換句話說,爲什麼它在創建預編譯頭文件時不使用這個.idb文件?

我不確定你需要什麼進一步的信息才能給我答案,所以請問是否有更多的信息需要我提供。

回答

4

感謝一位同事,我得到了答案。

問題是stdafx.cpp的調試信息格式設置爲程序數據庫(/ Zi),其中所有其他文件都將其設置爲用於編輯和繼續(/ ZI)的程序數據庫。

將它們全部更改爲程序數據庫以進行編輯並繼續(/ ZI),然後執行完全重建即可解決問題。

我想升級搞砸了。

0

也許您的發佈版本配置爲寫入文件[已刪除] \ debug \ vc100.idb而不是[已刪除] \ release \ vc100.idb?檢查發佈版本的項目設置,並確保沒有像這樣的硬編碼路徑組件。

+0

發佈版本不會生成一個idb文件,因爲它只用於調試。因此,發佈版本的工作原理和調試沒有。 – Steiny 2010-07-01 22:11:46

+0

默認情況下,發佈版本不會生成idb文件,但您可以配置(很可能是偶然)以便這樣做。 – 2010-07-02 00:02:07

+0

謝謝,我想出了困難的方式哈哈。這一切都與調試信息格式設置有關。 – Steiny 2010-07-04 21:55:39

0

下面是我只是固定在Visual Studio 2008中這樣的錯誤:

背景:

  • 我有一個包含兩個子項目的解決方案。
  • 一個項目編譯.dll;
  • 一個項目編譯使用此.dll的.exe文件;
  • .exe項目依賴於.dll項目;
  • 問題:我有兩個項目都將它們的輸出轉儲到同一目錄,即將「OutPutDirectory」和「IntermediateDirectory」設置爲寫入根目錄中的公共目錄「../$(ConfigurationName)」。

錯誤原因:

  • 此錯誤的原因是,當該.dll項目被編譯,它在相同目錄中創建的預編譯的頭(.PCH *)。 exe目錄,並且在編譯.exe項目時,它會及時覆蓋.dll項目中的預編譯頭文件(* .pch)。

的修復:

  • 爲了解決這個問題,我改變了「IntermediateDirectory」兩個子項目爲「臨時」,使臨時文件(包括預編譯的頭文件)被寫入不同的目錄。
1

爲stdafx.cpp的屬性頁面中的調試信息格式選擇禁用,然後返回並選擇繼承父項爲我工作。

1

我編譯一個項目,該$(ProjectName)是從項目的實際輸出文件不同當打這個錯誤與VS2005(即Linker > Output File未設置爲$(OutDir)\$(ProjectName).exe默認而是別的東西,如$(OutDir)\$(ProjectName)-custom_postfix.exe

在這種情況下,顯然只有當做一個重建項目,vc80.pdb似乎被錯誤地擡頭。

幫助我的是另外設置C/C++ > Output Files > Progam Database File Name$(IntDir)\$(TargetName).pdb。 (而不是默認vc80.pdb

+0

我有類似的情況(使用自定義名稱,工作正常,然後突然遇到此錯誤),但解決方案與手動刪除輸出文件和重建一樣簡單。 – iX3 2016-11-01 12:16:17

+0

@ iX3:只有在嘗試重新構建解決方案之前,刪除.pdb文件纔有用。然後它會再次失敗並出現相同的錯誤。 Martin Ba最初的回答爲我解決了這個問題。 – c00000fd 2017-10-24 00:03:10

相關問題