2013-12-17 378 views
27

我正在使用Visual Studio 2013.每個項目都經常按項目拒絕編譯。如果我撤銷任何更改,它仍然不會編譯。我發現重新創建整個項目是可行的。我想實際解決這個問題。那我得到的錯誤是:Visual Studio 2013致命錯誤C1041/FS

1>Critic.cpp : fatal error C1041: cannot open program database 'c:\users\username\desktop\projectName\projectName\x64\debug\vc120.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS 

我試着按照這些指導無濟於事:http://msdn.microsoft.com/en-us/library/dn502518.aspx

有沒有其他人遇到過這一點,並找到了解決?

+2

鍵入這個給了我一個主意。我禁用了Carbonite(一種在線備份服務),以防它干擾並重新啓動並編譯我的項目。如果您遇到此問題並且發現此問題,則可能需要禁用可能會鎖定計算機上的文件的任何內容。 – PThomasCS

+0

您是否嘗試了錯誤消息推薦的/ FS? – cup

+0

@cup是的,/ FS標誌沒有解決它。 – PThomasCS

回答

5

,我發現了同樣的問題,彙集關於VS2013 libkml(出現錯誤專門針對libkmlxsd項目中libkml溶液)。

Error 112 error C1041: cannot open program database 'd:\gstabel\falkermap2\libkml-1.2.0\msvc\debug\vc120.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS d:\gstabel\falkermap2\libkml-1.2.0\src\stdafx.cpp 1 1 libkmlxsd 

/FS (Force Synchronous PDB Writes)標誌爲我工作。但我不得不在裏面設置所有的項目解決方案,並重建所有的,以使其工作。

5

我同意PThomasCS

首先我嘗試使用微軟建議/FS (Force Synchronous PDB Writes)

要在Visual Studio開發環境

  1. 打開項目的屬性頁對話框中設置此編譯器選項。有關詳細信息,請參閱使用項目屬性。
  2. 選擇C/C++文件夾。
  3. 選擇命令行屬性頁面。
  4. 修改其他選項屬性以包含/ FS,然後選擇確定。

但它沒有工作。

我注意到dropbox鎖定文件。我停止了同步。之後,錯誤消失。因此,請嘗試關閉/停止任何可能會鎖定文件的程序。

希望這會有所幫助。

0

我面臨同樣的問題。

刪除完整$(IntDir)爲我工作。這裏

0

同樣的問題也

  • /FS沒有工作
  • 刪除VS2013文件沒有工作
  • 重新啓動計算機沒有工作
  • 從項目中刪除頁眉和源文件和重新添加它們,沒有工作
  • 關閉谷歌驅動器和Dropbox沒有工作

我不得不刪除損壞的副本並使用我的備份副本 - 通常是每天,我把我的工作文件夾的拷貝到備份驅動器

8

C/C++ - >常規設置頁面爲每個項目,將多處理器編譯選項設置爲幫助了我。

+0

工作過她,謝謝。 –

+0

是的,但它會傷害編譯時間:) –

39

我有這個問題,因爲解決方案中的不同項目具有相同的中間目錄。

更改

$(Platform)\$(Configuration)\ to $(Platform)\$(Configuration)\$(ProjectName)\ 

配置屬性 - >通用>中間體目錄

在每個項目

解決它。

+0

這個解決方案就像一個魅力!謝謝! – stoneyang

+0

使用'/ FS'爲我工作,直到我的SLN變得更大;那麼我需要這個。 –

+0

爲我工作!謝謝一堆! – Scumble373

2

如果您在解決方案中有多個項目,則需要將/ FS添加到每個項目中才能使用。只需選擇project-> properties-> C/C++ - > Commandline - > Additional Options。

1

爲我解決了什麼是手動殺死mspdbsrv進程。偶爾有些東西不能很好地處理併發構建,並陷入錯誤的狀態。 下一次構建重新啓動了pdb服務器,並全部恢復正常。

1

我正在運行備份服務。我的問題是,當編譯器試圖寫出.pdb文件時,備份服務不斷從先前的編譯中備份新的.pdb文件。通過從備份中排除.pdb文件,我解決了這個問題。

這種類型的問題很難追查,因爲它是間歇性的。備份完成後,編譯器創建新的.pdb文件時不會再發生衝突,因此您可能會認爲其他某些解決方案起作用。

0

/FS標記需要放置在鏈接器命令行中。做工精良

+0

FS =強制同步,什麼,爲什麼,如何... https://msdn.microsoft.com/en-us/library/dn502518.aspx – zipzit

2

如果你使用CUDA,然後設置

項目 - >屬性 - > CUDA C/C++ - >主機 - >其他編譯器選項 - >/FS

0

我也有這個問題,我通過刪除來解決它。從項目目錄pdb文件並重新編譯

0

我有同樣的問題,中間目錄爲該項目爲空。所以接受的修復程序對我來說不起作用。

我做一個乾淨的,並建立在這給了錯誤

5

我有一個類似的問題,該項目固定它:C++回購,將建立罰款爲其他人在我的球隊不會給我正確構建(給問題中提到的.PDB/FS錯誤),有時也會鏈接錯誤。有人指出,我正在克隆我的Dropbox中某個位置的其中一個回購站。在嘗試了許多其他想法之後,我終於向非Dropbox位置創建了一個新的克隆,並且該解決方案無錯地編譯。我懷疑這個問題對其他文件同步服務可能是共同的。 (Box,谷歌驅動器等),雖然我還沒有測試過這些。

1

由於錯誤消息提示,當多個進程嘗試同時訪問項目的PDB文件時會發生此錯誤,如果啓用並行編譯會發生這種情況(我有第三方生成調度程序的問題,我不確定當構建由Visual Studio自己的調度器管理時是否會發生這種情況)。

使用/ FS編譯器選項的說明指向正確的方向,訣竅在於確保編譯選項始終用於編譯。

如果您使用CMake生成解決方案文件,你應該在CMAKE_C_FLAGS和/或CMAKE_CXX_FLAGS(指定/ FS標誌,看到他們,你可能需要勾選高級複選框中的CMake GUI )並重新生成解決方案。

如果您使用CUDA,如Fillippohis answer注意,你需要確保主機編譯器設置標誌爲好。對於Visual Studio生成的解決方案,請在項目屬性頁面的CUDA C/C++ - >主機 - >附加編譯器選項中設置標誌。 但是,對於CMake生成的解決方案文件,您不會擁有任何CUDA C++屬性頁面,因此您需要編輯CMake配置。 如上所述,只需將/ FS標誌添加到CMAKE_{C,CXX}_FLAGS,並檢查CUDA_PROPAGATE_HOST_FLAGS設置爲ON(which is its default value)。