10
votes

Comment éliminer l'erreur C2859 lorsque vous essayez d'utiliser un en-tête précompilé avec VS2010 (VC100) en mode de débogage?

J'essaie de mettre à niveau une ancienne solution pour utiliser VS2010 (VC100).

J'ai la configuration de ce que STDAFX.CPP créera un en-tête précompilé STDAFX.PCH de STDAFX.H. Ensuite, tous les autres fichiers .CPP qui incluent STDAFX.H sont chargés d'utiliser l'en-tête précompilé.

Ces messages m'ont aidé à l'avoir aussi loin:

  • Erreurs d'en-têtes Visual C ++ précompilées
  • en-têtes précompilés

    Maintenant, tout va bien lorsque je construis en mode de sortie. Cependant, lorsque j'essaie de construire en mode de débogage, j'obtiens tout un tas d'erreurs disant:

    Erreur 1 erreur C2859: [Supprimé] \ Debug \ vc100.idb n'est pas le fichier d'idb utilisé lorsque cet en-tête précompilé a été créé, recréez l'en-tête précompilé.

    Je crois que ce fichier .idb est un fichier de débogage intermédiaire créé par Visual Studio.

    Pourquoi est-ce que je reçois cette erreur? En d'autres termes, pourquoi n'a-t-il pas utilisé ce fichier .idb lorsqu'il a créé l'en-tête précompilé?

    Je ne suis pas sûr des informations complémentaires que vous devez pouvoir me donner la réponse, alors demandez s'il existe plus d'informations que je dois fournir.


0 commentaires

5 Réponses :


0
votes

Peut-être que votre version de version est configurée pour écrire un fichier [supprimé] \ Debug \ vc100.idb au lieu de [supprimé] \ version \ vc100.idb? Vérifiez les paramètres du projet pour votre version de version et assurez-vous qu'il n'y a pas de composants de chemin codé de type codé comme celui-là.


3 commentaires

Une version de déverrouillage ne génère pas de fichier IDB puisqu'elle est uniquement pour le débogage. Par conséquent, pourquoi les travaux de construction de la libération et le débogage ne le font pas.


Une version de version par défaut ne génère pas de fichier d'idb mais que vous pouvez configurer (probablement par accident) pour le faire.


Merci je pensais que la dure voie lol. C'était tout à faire avec le paramètre de format d'information de débogage.



5
votes

Merci à un collègue, j'ai eu la réponse.

Le problème était que STDAFX.CPP avait un format d'information de débogage défini sur la base de données de programme (/ ZI) où tous les autres fichiers l'avaient défini sur la base de données de programme pour éditer et continuer (/ p>

Modification de la base de données de programme pour éditer et continuer (/ zi) et faire une reconstruction complète résolue le problème.

Je suppose que la mise à niveau le vissait d'une manière ou d'une autre.


0 commentaires

0
votes

Voici comment je viens de corriger cette erreur sur Visual Studio 2008:

arrière-plan:

  • J'ai une solution contenant deux sous-projets.
  • Un projet compile le .dll;
  • Un projet compose le .exe qui a utilisé cela .dll;
  • Le projet .exe dépend du projet .dll;
  • Problème: J'avais les deux projets de déversement de leur sortie dans le même répertoire, c'est-à-dire à la fois "de sortiedirectory" et "intermédiaireirectory" défini pour écrire dans un répertoire commun dans la racine "../ème (ConfigurationName)". < / li>

    cause d'erreur:

    • La cause de cette erreur était que lorsque le projet .dll a été compilé, il a créé l'en-tête précompilé (* .PCH) dans le répertoire même comme le répertoire .exe, et quand le .exe Le projet a été compilé, il a rapidement écrasé l'en-tête précompilé (* .PCH) du projet .dll.

      Le correctif:

      • Pour résoudre ce problème, j'ai changé l'intermédiaire pour les deux sous-projets à "Temp", de sorte que les fichiers temporaires (y compris les fichiers d'en-tête précompilés) ont été écrits dans différents répertoires.

0 commentaires

1
votes

Sélectionnez Désactiver le format d'informations de débogage dans la page Propriétés de STDAFX.CPP, puis revenir en arrière et sélectionnez Hériter de Parent travaillé pour moi.


0 commentaires

4
votes

J'ai frappé cette erreur avec VS2005 lors de la compilation d'un projet où le $ (nom_jette) est différent à partir du fichier de sortie réel du projet (c.-à-d. Linker> Fichier de sortie n'est pas défini sur la valeur par défaut de $ (survolée) \ $ (projetName) .exe mais à quelque chose d'autre, par exemple $ (down) \ $ ( Nom de projet) -Custom_postfix.exe )

Dans ce cas, et apparemment seul lorsque vous effectuez un projet de reconstruction, le vc80.pdb semble être levé à tort.

Qu'est-ce qui m'a aidé à définir en outre des fichiers de sortie C / C ++> Nom du fichier de base de données PROGAM TO $ (INTDIR) \ $ (TargeName) .pdb . (Au lieu de la valeur par défaut vc80.pdb )


2 commentaires

J'ai eu une situation similaire (en utilisant le nom personnalisé, fonctionnait bien, puis a soudainement rencontré cette erreur) mais la solution était aussi simple que de supprimer manuellement les fichiers de sortie et la reconstruction.


@ IX3: La suppression de fichier .pdb ne peut que jusqu'à ce que vous essayiez de reconstruire une solution. Ensuite, cela échouera avec la même erreur à nouveau. La réponse initiale de Martin BA a fixé le problème pour moi.