webentwicklung-frage-antwort-db.com.de

Visual Studio 2013 schwerwiegender Fehler C1041/FS

Ich verwende Visual Studio 2013. Von Zeit zu Zeit lehnt das Projekt das Kompilieren ab. Wenn ich Änderungen rückgängig mache, wird es trotzdem nicht kompiliert. Ich habe festgestellt, dass die Wiederherstellung des gesamten Projekts funktioniert. Ich möchte das Problem aber tatsächlich beheben. Der Fehler, den ich erhalte, ist:

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

Ich habe versucht, diesen Anweisungen ohne Erfolg zu folgen: http://msdn.Microsoft.com/en-us/library/dn502518.aspx

Hat jemand anderes dies gefunden und ein Update gefunden?

37
PThomasCS

Ich hatte dieses Problem, weil verschiedene Projekte in einer Lösung dasselbe Zwischenverzeichnis hatten. 

Ändern 

$(Platform)\$(Configuration)\

zu 

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

im 

Konfigurationseigenschaften | Allgemeines | Zwischenverzeichnis  

in jedem der projekte gelöst.

50
test

auf der Einstellungsseite C/C++ -> Allgemein für jedes Projekt half es mir, die Compilierung von Multi_processor auf No zu setzen.

8
Darren Evans

Ich stimme mit PThomasCS überein. 

Zuerst habe ich versucht, Microsoft advice /FS (Force Synchronous PDB Writes) zu verwenden

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen finden Sie unter Arbeiten mit Projekteigenschaften.
  2. Wählen Sie den C/C++ - Ordner.
  3. Wählen Sie die Eigenschaftsseite der Befehlszeile aus.
  4. Ändern Sie die Eigenschaft Zusätzliche Optionen, um/FS einzuschließen, und wählen Sie dann OK.

aber es hat nicht funktioniert.

Ich habe festgestellt, dass Dropbox die Datei sperrt. Ich habe die Synchronisation angehalten. Nach diesem Fehler verschwand. Versuchen Sie daher, alle Programme zu schließen oder zu stoppen, die die Dateien sperren könnten.

Hoffe das hilft.

8
Maks

Ich habe das gleiche Problem beim Kompilieren von libkml auf VS2013 gefunden (der Fehler wird speziell bei libkmlxsd project in libkml Lösung angezeigt.

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

Das Flag /FS (Force Synchronous PDB Writes) funktioniert für mich. Aber ich musste alle Projekte in die Lösungen setzen und alle neu erstellen, damit es funktioniert.

5

Ich hatte ein ähnliches Problem: C++ - Repos, die gut für andere Leute in meinem Team erstellt werden könnten, würden für mich nicht ordnungsgemäß erstellt (gab .PDB/FS-Fehler, wie in der Frage erwähnt) und manchmal auch Link-Fehler. Jemand hat darauf hingewiesen, dass ich eines der Repos an einen Ort in meiner Dropbox geklont habe. Nachdem ich viele andere Ideen ausprobiert hatte, erstellte ich schließlich einen neuen Klon an einem Nicht-Dropbox-Speicherort und die Lösung wird ohne Fehler kompiliert. Ich vermute, dass das Problem bei anderen Dateisynchronisierungsdiensten auftreten könnte. (Box, Google-Laufwerk usw.), obwohl ich sie nicht getestet habe.

5
user2373786

Wenn sich in der Lösung mehrere Projekte befinden, müssen Sie/FS zu jedem Projekt hinzufügen, damit es funktioniert. Wählen Sie einfach das Projekt-> Eigenschaften-> C/C++ -> Befehlszeile -> Zusätzliche Optionen aus.

2
VSnoob

wenn Sie CUDA verwenden, legen Sie fest

Projekt -> Eigenschaften -> CUDA C/C++ -> Host -> Zusätzliche Compileroptionen ->/FS

2
Fillippo

Wie die Fehlermeldung andeutet, tritt dieser Fehler auf, wenn mehrere Prozesse gleichzeitig versuchen, auf die PDB-Datei des Projekts zuzugreifen. Dies kann passieren, wenn Sie die parallele Kompilierung aktivieren (ich war mir nicht sicher, ob das Problem mit einem Build Scheduler eines Drittanbieters aufgetreten ist.) ob dies auch passieren kann, wenn der Build vom Visual Studio-eigenen Scheduler verwaltet wird).

Die Anweisungen zur Verwendung der/FS-Compileroption weisen Sie in die richtige Richtung. Der Trick besteht darin, sicherzustellen, dass die Compileroption in Ihrer Kompilierung immer verwendet wird.

Wenn Sie CMake zum Generieren der Lösungsdatei verwenden , sollten Sie das/FS-Flag im CMAKE_C_FLAGS und/oder CMAKE_CXX_FLAGS (um sie anzuzeigen, müssen Sie möglicherweise das Kontrollkästchen Erweitert in der CMake-GUI aktivieren) und die Lösung neu generieren.

Wenn Sie CUDA verwenden, wie Fillippo in seine Antwort , müssen Sie machen Stellen Sie sicher, dass der Host-Compiler auch das Flag setzt. Setzen Sie für eine von Visual Studio generierte Lösung das Flag in CUDA C/C++ -> Host -> Zusätzliche Compileroptionen auf der Seite mit den Projekteigenschaften. Für von CMake generierte Lösungsdateien steht jedoch keine CUDA C++ - Eigenschaftsseite zur Verfügung, sodass Sie stattdessen die CMake-Konfiguration bearbeiten müssen. Fügen Sie einfach das/FS-Flag zum CMAKE_{C,CXX}_FLAGS Hinzu, wie oben erwähnt, und stellen Sie sicher, dass CUDA_PROPAGATE_Host_FLAGS Auf ON gesetzt ist ( dies ist der Standardwert ).

2
GPhilo

Ich hatte auch dieses Problem und löste es, indem die .pdb-Datei aus dem Projektverzeichnis gelöscht und neu kompiliert wurde

1
Juraj Muráň

Ich hatte das gleiche Problem und die Lösung war sehr einfach: Die Festplatte war voll ...

Die Fehlermeldung war jedoch in diesem Fall nicht sehr hilfreich ... Ich fand sie mithilfe des Prozessmonitors.

1

Ich habe einen Sicherungsdienst ausgeführt. Mein Problem war, dass der Sicherungsdienst die neue .pdb-Datei aus der vorherigen Kompilierung sicherte, als der Compiler versuchte, die .pdb-Datei zu schreiben. Durch das Ausschließen von .pdb-Dateien von der Sicherung habe ich dieses Problem endgültig gelöst. 

Diese Art von Problem ist schwer zu finden, da es intermittierend ist. Nachdem die Sicherung abgeschlossen ist, gibt es keinen Konflikt mehr, wenn der Compiler die neue .pdb-Datei erstellt. Es kann also sein, dass andere Lösungen funktionieren.

1
atlake

Was für mich gelöst wurde, war, den mspdbsrv-Prozess manuell zu beenden. Etwas dort kann gelegentlich nicht gleichzeitig mit Builds fertig werden und bleibt in einem fehlerhaften Zustand stecken .. Der nächste Build startete den pdb-Server neu und alles wurde wieder normal.

1
Ofek Shilon

Dieser Fehler kann unter anderem dazu führen, dass pdb-Dateien mit einem schreibgeschützten Attribut gekennzeichnet sind. Wenn dies der Fall ist, entfernen Sie das schreibgeschützte Attribut aus der Datei.

So entfernen Sie Klicken Sie mit der rechten Maustaste auf PDB-Datei -> Eigenschaften -> Attribute deaktivieren: ReadOnly

0
user2898339

Das/FS-Tag muss in der Linker-Befehlszeile platziert werden. Gut arbeiten

0
Sylvain P

Ich hatte dieses Problem bei mehreren Projekten. Bei diesen Projekten hatte ich <ProgramDataBaseFileName> unter dem <ClCompile> Sektion. Entferne den <ProgramDataBaseFileName> section und sein Tag (damit Visual Studio den Standard verwendet) haben dies verhindert.

0
caps

Ich hatte das gleiche Problem und das Zwischenverzeichnis war für dieses Projekt leer. Der akzeptierte Fix funktionierte also nicht für mich.

Ich habe das Problem behoben, indem ich das fehlerhafte Projekt sauber gemacht und aufgebaut habe

0
George Arokiam

Bei der Erstellung von Qt Creator mit MSVC bin ich auf dieses Problem gestoßen. Durch das Erstellen des fehlenden debug-Ordners und die Neuerstellung wurde das Problem behoben.

0
jimbo1qaz

Ich habe versucht, ein Docker-Volume aufzubauen. Es scheint, dass cl.exe zugeordnete Verzeichnisse nicht verarbeiten kann. Ich habe die Dateien in einen nicht zugeordneten Ordner kopiert und erfolgreich kompiliert.

Ich hatte das gleiche Problem.

Das Löschen des kompletten $ (IntDir) hat für mich funktioniert.

0
Urban

dasselbe Problem auch hier

  • / FS hat nicht funktioniert
  • das Löschen von VS2013-Dateien hat nicht funktioniert
  • der Neustart des Computers hat nicht funktioniert
  • entfernen Sie die Header- und Quelldateien aus dem Projekt und fügen Sie sie erneut hinzu 
  • das Deaktivieren von Google Drive und Dropbox funktionierte nicht

Ich musste die beschädigte Kopie löschen und meine Sicherungskopie verwenden - normalerweise lade ich eine Kopie meines Arbeitsordners auf ein Sicherungslaufwerk

0
forest.peterson