web-dev-qa-db-fra.com

Erreur irrécupérable C1041/FS dans Visual Studio 2013

J'utilise Visual Studio 2013. De temps en temps, par projet, refuse de compiler. Si j'annule des modifications, la compilation ne sera toujours pas effectuée. J'ai trouvé que recréer le projet entier fonctionne. Je voudrais cependant résoudre le problème. L'erreur que je reçois est la suivante:

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

J'ai essayé de suivre ces instructions en vain: http://msdn.Microsoft.com/en-us/library/dn502518.aspx

Quelqu'un d'autre a-t-il rencontré ce problème et trouvé une solution?

37
PThomasCS

J'ai eu ce problème parce que différents projets dans une solution avaient le même répertoire intermédiaire. 

En changeant 

$(Platform)\$(Configuration)\

à 

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

dans 

Propriétés de configuration | Général | Répertoire intermédiaire  

dans chacun des projets résolu.

50
test

dans la page C/C++ -> Général - paramètres de chaque projet, régler la compilation Multi_processor compilation option sur Non m'a aidé.

8
Darren Evans

Je suis d'accord avec PThomasCS

Premièrement, j'ai essayé d'utiliser les conseils de Microsoft /FS (Forcer la synchronisation avec PDB synchrone)

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus d'informations, voir Utilisation des propriétés du projet.
  2. Sélectionnez le dossier C/C++.
  3. Sélectionnez la page de propriétés Ligne de commande.
  4. Modifiez la propriété Additional Options pour inclure/FS, puis choisissez OK.

mais ça n'a pas marché.

J'ai remarqué que Dropbox verrouille le fichier. J'ai arrêté la synchronisation. Après cette erreur a disparu. Essayez donc de fermer/arrêter tout programme susceptible de verrouiller les fichiers.

J'espère que cela t'aides.

8
Maks

J'ai trouvé le même problème lors de la compilation libkml sur VS2013 (l'erreur apparaît spécifiquement à la solution libkmlxsd à l'intérieur de la solution 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

Le /FS (Forcer l’écriture synchrone de la PDB) est utile pour moi. Mais je devais définir all projects dans les solutions et tout reconstruire pour que cela fonctionne.

5
Gabriel C. Stabel

J'ai eu un problème similaire: les dépôts c ++ qui construiraient bien pour les autres membres de mon équipe ne se construiraient pas correctement pour moi (donnaient des erreurs .PDB/FS comme mentionné dans la question) et parfois aussi des erreurs de lien. Quelqu'un a signalé que je clonais l'un des dépôts à un emplacement de ma Dropbox. Après avoir essayé de nombreuses autres idées, j'ai finalement créé un nouveau clone vers un emplacement non-dropbox et la solution a été compilée sans erreur. Je soupçonne que le problème pourrait être commun à d'autres services de synchronisation de fichiers. (Box, Google drive, etc.), même si je n’ai pas testé ces outils.

5
user2373786

Si vous avez plusieurs projets dans la solution, vous devez ajouter/FS à chaque projet pour que celui-ci fonctionne. Sélectionnez simplement le projet-> Propriétés-> C/C++ -> Ligne de commande -> Options supplémentaires.

2
VSnoob

si vous utilisez CUDA, définissez

Projet -> Propriétés -> CUDA C/C++ -> Hôte -> Options supplémentaires du compilateur ->/FS

2
Fillippo

Comme le message d'erreur l'indique, cette erreur se produit lorsque plusieurs processus tentent d'accéder au fichier PDB du projet en même temps, ce qui peut se produire si vous activez la compilation parallèle (j'ai eu le problème avec un planificateur de construction tiers, je ne suis pas sûr. si cela peut se produire également lorsque la construction est gérée par le propre planificateur de Visual Studio).

Les instructions pour utiliser l'option du compilateur/FS vous orientent dans la bonne direction. L'astuce consiste à s'assurer que l'option du compilateur est toujours utilisée dans votre compilation.

Si vous utilisez CMake pour générer le fichier de solution, vous devez spécifier le drapeau/FS dans CMAKE_C_FLAGS et/ou CMAKE_CXX_FLAGS (pour les voir, vous devrez peut-être cocher Avancé case à cocher dans l'interface graphique de CMake) et régénérez la solution.

Si vous utilisez CUDA, comme Fillippo noté dans sa réponse , vous devez vous assurer que le compilateur hôte définit également le drapeau. Pour une solution générée par Visual Studio, définissez l'indicateur dans CUDA C/C++ -> Hôte -> Options de compilateur supplémentaires dans la page des propriétés du projet . Pour les fichiers de solution générés par CMake, vous ne disposerez d'aucun fichier CUDA. Page de propriétés C++, vous devez donc modifier la configuration de CMake à la place . Ajoutez simplement le drapeau/FS au CMAKE_{C,CXX}_FLAGS comme mentionné ci-dessus et vérifiez que CUDA_PROPAGATE_Host_FLAGS est défini sur ON ( qui est sa valeur par défaut ).

2
GPhilo

J'ai eu ce problème aussi et je l'ai résolu en supprimant le fichier .pdb du répertoire du projet et en le recompilant.

1
Juraj Muráň

J'ai eu le même problème et la solution était très simple: le disque était plein ...

Mais le message d'erreur n'a pas été très utile dans ce cas .... Je l'ai trouvé en utilisant le moniteur de processus.

1
Sebastian Jänicke

Je courais un service de sauvegarde. Mon problème était que le service de sauvegarde continuait à sauvegarder le nouveau fichier .pdb de la compilation précédente lorsque le compilateur tentait d'écrire le fichier .pdb. En excluant les fichiers .pdb de la sauvegarde, j'ai résolu ce problème pour de bon. 

Ce type de problème est difficile à détecter car il est intermittent. Une fois la sauvegarde terminée, il n'y a plus de conflit lorsque le compilateur crée le nouveau fichier .pdb. Vous pouvez donc penser que d'autres solutions ont fonctionné.

1
atlake

Ce qui a résolu le problème pour moi a été de tuer manuellement le processus mspdbsrv. De temps en temps, quelque chose ne gère pas bien les versions simultanées et reste bloqué dans un état erroné .. La prochaine version relance le serveur pdb et tout redevient normal.

1
Ofek Shilon

Une des raisons pour lesquelles cette erreur peut se produire est que les fichiers pdb sont marqués avec un attribut en lecture seule. Si tel est le cas, supprimez l'attribut en lecture seule du fichier.

Pour supprimer Cliquez avec le bouton droit de la souris sur Fichier PDB -> Propriétés -> Décocher les attributs: Lecture seule

0
user2898339

La balise/FS doit être placée dans la ligne de commande de l’éditeur de liens. Bien travailler

0
Sylvain P

J'ai eu le même problème et le répertoire intermédiaire était vide pour ce projet. Donc, le correctif accepté ne fonctionnait pas pour moi.

Je l'ai corrigé en effectuant un nettoyage et en m'appuyant sur le projet à l'origine de l'erreur

0
George Arokiam

J'ai rencontré ce problème lors de la construction de Qt Creator avec MSVC. La création du dossier debug manquant et la reconstruction ont corrigé le problème.

0
jimbo1qaz

J'essayais de construire sur un volume de docker. Il semble que cl.exe ne puisse pas gérer les répertoires mappés. J'ai copié les fichiers dans un dossier non mappé et celui-ci a été compilé avec succès.

0

J'ai rencontré le même problème.

La suppression de $ complète (IntDir) a fonctionné pour moi.

0
Urban

même problème ici aussi

  • / FS n'a pas fonctionné
  • la suppression des fichiers VS2013 n'a pas fonctionné
  • le redémarrage de l'ordinateur n'a pas fonctionné
  • supprimer l'en-tête et les fichiers source du projet et les rajouter, n'a pas fonctionné 
  • désactiver google drive et dropbox n'a pas fonctionné

Je devais supprimer la copie corrompue et utiliser ma copie de sauvegarde - en général, je dépose une copie de mon dossier de travail dans un lecteur de sauvegarde.

0
forest.peterson