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?
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.
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é.
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
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.
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.
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.
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.
si vous utilisez CUDA, définissez
Projet -> Propriétés -> CUDA C/C++ -> Hôte -> Options supplémentaires du compilateur ->/FS
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 ).
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.
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.
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é.
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.
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
La balise/FS doit être placée dans la ligne de commande de l’éditeur de liens. Bien travailler
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
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.
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.
J'ai rencontré le même problème.
La suppression de $ complète (IntDir) a fonctionné pour moi.
même problème ici aussi
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.