私は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
他の誰かがこれに遭遇し、修正を見つけましたか?
ソリューション内の異なるプロジェクトに同じ中間ディレクトリがあったため、この問題が発生しました。
変化
$(Platform)\$(Configuration)\
に
$(Platform)\$(Configuration)\$(ProjectName)\
に
構成プロパティ | 一般 | 中間ディレクトリ
各プロジェクトで解決しました。
C/C++-> General各プロジェクトの設定ページで、Multi_processor compilationオプションをNoに設定すると助けてくれました。
PThomasCSに同意します。
まず、Microsoftのアドバイスを使用しようとしました / FS(Force Pynchronous PDB Writes) :
Visual Studio開発環境でこのコンパイラオプションを設定するには
しかし、うまくいきませんでした。
Dropboxがファイルをロックしていることに気付きました。同期を停止しました。そのエラーが消えた後。そのため、ファイルをロックする可能性のあるプログラムをすべて閉じ/停止してみてください。
お役に立てれば。
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) フラグが機能します。しかし、私はそれを機能させるために、ソリューション内にすべてのプロジェクトを設定し、すべてを再構築する必要がありました。
私は同様の問題を抱えていました:私のチームの他の人のためにうまく構築されるc ++リポジトリは私のために適切に構築されず(質問で言及されているように.PDB/FSエラーを与えます)、時にはエラーもリンクします。誰かが、リポジトリの1つをDropbox内の場所に複製していると指摘しました。他の多くのアイデアを試した後、私は最終的に、Dropbox以外の場所に新しいクローンを作成しました。ソリューションはエラーなしでコンパイルされます。この問題は他のファイル同期サービスに共通していると思われます。 (Box、Googleドライブなど)、私はそれらをテストしていませんが。
cUDAを使用する場合は、設定します
プロジェクト->プロパティ-> CUDA C/C++->ホスト->追加のコンパイラオプション->/FS
私もこの問題を抱えていたので、プロジェクトディレクトリから.pdbファイルを削除して再コンパイルすることで解決しました。
ソリューション内に複数のプロジェクトがある場合、/ FSを機能させるために各プロジェクトに追加する必要があります。プロジェクト->プロパティ-> C/C++->コマンドライン->追加オプションを選択するだけです。
エラーメッセージが示唆するように、このエラーは、複数のプロセスがプロジェクトの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に設定されていることを確認します( デフォルト値 )。
私は同じ問題を抱えていて、解決策は非常に簡単でした:ディスクがいっぱいでした...
しかし、この場合、エラーメッセージはあまり役に立ちませんでした...プロセスモニターを使用して見つけました。
バックアップサービスを実行していました。私の問題は、コンパイラが.pdbファイルを書き込もうとしたときに、バックアップサービスが以前のコンパイルからの新しい.pdbファイルをバックアップし続けたことでした。バックアップから.pdbファイルを除外することで、この問題を完全に解決しました。
このタイプの問題は断続的であるため、追跡が困難です。バックアップの完了後、コンパイラが新しい.pdbファイルを作成するときに競合は発生しないため、他のソリューションが機能していると思われるかもしれません。
私にとってそれを解決したのは、mspdbsrvプロセスを手動で強制終了することでした。場合によっては、同時ビルドをうまく処理できず、誤った状態のままになることがあります。次のビルドでpdbサーバーが再起動され、すべてが正常に戻りました。
このエラーが発生する理由の1つは、pdbファイルが読み取り専用属性でマークされていることです。存在する場合は、ファイルから読み取り専用属性を削除します。
PDBファイルでRight Clikを削除するには-> [プロパティ]-> [属性のチェックを外す:読み取り専用
/ FSタグは、リンカコマンドラインに配置する必要があります。うまくできた
この問題はいくつかのプロジェクトで発生しました。これらのプロジェクトでは、<ProgramDataBaseFileName>
セクションで<ClCompile>
を設定しました。 <ProgramDataBaseFileName>
セクションとそのタグを削除すると(Visual Studioがデフォルトを使用するように)、これはなくなりました。
同じ問題があり、そのプロジェクトの中間ディレクトリは空でした。したがって、受け入れられた修正は私にとってはうまくいきませんでした。
私はそれを修正してエラーを与えたプロジェクトをクリーンアップしてビルドしました
MSVCでQt Creatorをビルドしているときにこの問題に遭遇しました。不足しているdebug
フォルダーを作成して再構築すると、問題が修正されました。
Dockerボリュームでビルドしようとしていました。 cl.exeはマップされたディレクトリを処理できないようです。ファイルをマップされていないフォルダーにコピーし、正常にコンパイルしました。
私は同じ問題に直面しました。
完全な$(IntDir)を削除するとうまくいきました。
ここでも同じ問題
破損したコピーを削除してバックアップコピーを使用する必要がありました-通常、毎日、作業フォルダーのコピーをバックアップドライブにドロップします