web-dev-qa-db-ja.com

Visual Studio 2013の致命的なエラーC1041 / FS

私はVisual Studio 2013を使用しています。プロジェクトごとにコンパイルが拒否されることがよくあります。変更を元に戻しても、コンパイルはできません。プロジェクト全体を再作成するとうまくいくことがわかりました。しかし、実際に問題を修正したいと思います。私が得ているエラーは次のとおりです:

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

他の誰かがこれに遭遇し、修正を見つけましたか?

39
PThomasCS

ソリューション内の異なるプロジェクトに同じ中間ディレクトリがあったため、この問題が発生しました。

変化

$(Platform)\$(Configuration)\

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

構成プロパティ | 一般 | 中間ディレクトリ

各プロジェクトで解決しました。

51
test

C/C++-> General各プロジェクトの設定ページで、Multi_processor compilationオプションをNoに設定すると助けてくれました。

8
Darren Evans

PThomasCSに同意します。

まず、Microsoftのアドバイスを使用しようとしました / FS(Force Pynchronous PDB Writes)

Visual Studio開発環境でこのコンパイラオプションを設定するには

  1. プロジェクトの[プロパティページ]ダイアログボックスを開きます。詳細については、プロジェクトプロパティの操作を参照してください。
  2. C/C++フォルダーを選択します。
  3. [コマンドライン]プロパティページを選択します。
  4. [追加オプション]プロパティを変更して/ FSを含め、[OK]を選択します。

しかし、うまくいきませんでした。

Dropboxがファイルをロックしていることに気付きました。同期を停止しました。そのエラーが消えた後。そのため、ファイルをロックする可能性のあるプログラムをすべて閉じ/停止してみてください。

お役に立てれば。

8
Maks

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 Pynchronous PDB Writes) フラグが機能します。しかし、私はそれを機能させるために、ソリューション内にすべてのプロジェクトを設定し、すべてを再構築する必要がありました。

6

私は同様の問題を抱えていました:私のチームの他の人のためにうまく構築されるc ++リポジトリは私のために適切に構築されず(質問で言及されているように.PDB/FSエラーを与えます)、時にはエラーもリンクします。誰かが、リポジトリの1つをDropbox内の場所に複製していると指摘しました。他の多くのアイデアを試した後、私は最終的に、Dropbox以外の場所に新しいクローンを作成しました。ソリューションはエラーなしでコンパイルされます。この問題は他のファイル同期サービスに共通していると思われます。 (Box、Googleドライブなど)、私はそれらをテストしていませんが。

5
user2373786

cUDAを使用する場合は、設定します

プロジェクト->プロパティ-> CUDA C/C++->ホスト->追加のコンパイラオプション->/FS

3
Fillippo

私もこの問題を抱えていたので、プロジェクトディレクトリから.pdbファイルを削除して再コンパイルすることで解決しました。

2
Juraj Muráň

ソリューション内に複数のプロジェクトがある場合、/ FSを機能させるために各プロジェクトに追加する必要があります。プロジェクト->プロパティ-> C/C++->コマンドライン->追加オプションを選択するだけです。

2
VSnoob

エラーメッセージが示唆するように、このエラーは、複数のプロセスがプロジェクトのPDBファイルに同時にアクセスしようとしたときに発生します。これは、パラレルコンパイルを有効にした場合に発生する可能性があります(サードパーティのビルドスケジューラに問題があり、よくわかりませんこれは、ビルドがVisual Studioの独自のスケジューラーによって管理されている場合にも発生する可能性があります)。

/ FSコンパイラオプションを使用するための指示は、正しい方向を指し示します。その秘theは、コンパイラオプションがコンパイルで常に使用されるようにすることです。

CMake を使用してソリューションファイルを生成する場合CMAKE_C_FLAGSで/ FSフラグを指定する必要がありますCMAKE_CXX_FLAGS(それらを表示するには、CMake GUIのAdvancedチェックボックスにチェックマークを付ける必要があるかもしれません)、ソリューションを再生成します。

CUDAを使用している場合、 Fillippohis answer に記載されているように、ホストコンパイラもフラグを設定します。 Visual Studioで生成されたソリューションの場合、プロジェクトプロパティページのCUDA C/C++->ホスト->追加のコンパイラオプションでフラグを設定します。ただし、CMakeで生成されたソリューションファイルの場合は、CUDA C++プロパティページがないため、代わりにCMake構成を編集する必要があります。上記のようにCMAKE_{C,CXX}_FLAGSに/ FSフラグを追加し、CUDA_PROPAGATE_Host_FLAGSがONに設定されていることを確認します( デフォルト値 )。

2
GPhilo

私は同じ問題を抱えていて、解決策は非常に簡単でした:ディスクがいっぱいでした...

しかし、この場合、エラーメッセージはあまり役に立ちませんでした...プロセスモニターを使用して見つけました。

1

バックアップサービスを実行していました。私の問題は、コンパイラが.pdbファイルを書き込もうとしたときに、バックアップサービスが以前のコンパイルからの新しい.pdbファイルをバックアップし続けたことでした。バックアップから.pdbファイルを除外することで、この問題を完全に解決しました。

このタイプの問題は断続的であるため、追跡が困難です。バックアップの完了後、コンパイラが新しい.pdbファイルを作成するときに競合は発生しないため、他のソリューションが機能していると思われるかもしれません。

1
atlake

私にとってそれを解決したのは、mspdbsrvプロセスを手動で強制終了することでした。場合によっては、同時ビルドをうまく処理できず、誤った状態のままになることがあります。次のビルドでpdbサーバーが再起動され、すべてが正常に戻りました。

1
Ofek Shilon

このエラーが発生する理由の1つは、pdbファイルが読み取り専用属性でマークされていることです。存在する場合は、ファイルから読み取り専用属性を削除します。

PDBファイルでRight Clikを削除するには-> [プロパティ]-> [属性のチェックを外す:読み取り専用

0
user2898339

/ FSタグは、リンカコマンドラインに配置する必要があります。うまくできた

0
Sylvain P

この問題はいくつかのプロジェクトで発生しました。これらのプロジェクトでは、<ProgramDataBaseFileName>セクションで<ClCompile>を設定しました。 <ProgramDataBaseFileName>セクションとそのタグを削除すると(Visual Studioがデフォルトを使用するように)、これはなくなりました。

0
caps

同じ問題があり、そのプロジェクトの中間ディレクトリは空でした。したがって、受け入れられた修正は私にとってはうまくいきませんでした。

私はそれを修正してエラーを与えたプロジェクトをクリーンアップしてビルドしました

0
George Arokiam

MSVCでQt Creatorをビルドしているときにこの問題に遭遇しました。不足しているdebugフォルダーを作成して再構築すると、問題が修正されました。

0
jimbo1qaz

Dockerボリュームでビルドしようとしていました。 cl.exeはマップされたディレクトリを処理できないようです。ファイルをマップされていないフォルダーにコピーし、正常にコンパイルしました。

私は同じ問題に直面しました。

完全な$(IntDir)を削除するとうまくいきました。

0
Urban

ここでも同じ問題

  • / FSが機能しませんでした
  • vS2013ファイルの削除が機能しませんでした
  • コンピューターの再起動が機能しませんでした
  • プロジェクトからヘッダーファイルとソースファイルを削除し、それらを再度追加しても機能しませんでした
  • googleドライブとDropboxをオフにできませんでした

破損したコピーを削除してバックアップコピーを使用する必要がありました-通常、毎日、作業フォルダーのコピーをバックアップドライブにドロップします

0
forest.peterson