web-dev-qa-db-fra.com

Erreur C1047: Fichier objet créé avec un compilateur plus ancien que d'autres objets

J'ai un projet que je construis en C++ en mode Release dans Visual Studio 2008 SP1 sous Windows 7 et lorsque je le construis, je reçois:

erreur fatale C1047: le fichier de l'objet ou de la bibliothèque '.\Release\foobar.obj' a été créé avec un compilateur plus ancien que d'autres objets; reconstruire les anciens objets et les bibliothèques.

L'erreur se produit lors de la liaison.

J'ai essayé de supprimer le fichier objet spécifique et de le reconstruire, mais cela ne résout pas le problème. J'ai également essayé d'éliminer tout le dossier de construction de la version et de la reconstruire, mais cela n'a pas résolu le problème. Des idées?

23
Jared

Je suggère de réinstaller VS 2008 SP1. Avez-vous installé un autre VS (par exemple, VS Express) entre-temps? Ceci est connu pour provoquer des interférences avec une installation de VS existante.

Vous pouvez essayer de vérifier les versions du compilateur et de l'éditeur de liens en exécutant cl.exe et link.exe à partir de l'invite de commande Visual Studio.

11
Tobiesque

J'ai eu ce problème mais ma solution diffère:

Pour moi, le coupable est qu’une bibliothèque externe incluse a été compilée avec

/GL (=Enable link-time code generation under
      C/C++/ Optimization / Whole Program Optimization) 

utilisant un ancien studio visuel (2005). J'ai reconstruit ladite bibliothèque en 2005 sans/GL et l'erreur de l'éditeur de liens a disparu en 2008. Comme MSDN l'indique, il s'agit du paramètre/LTCG, défini automatiquement par l'indicateur/GL: http://msdn.Microsoft. com/fr-fr/bibliothèque/ms173554% 28v = vs.80% 29.aspx

14
Oliver Zendel

Deux manières:

1.Mise à jour vers Sp1 pour construire la bibliothèque

2.Vérifiez votre construction pour vous assurer que l'optimisation de tout le programme est désactivée. Pour un projet de bibliothèque statique, accédez à la page de propriétés et remplacez «Propriétés de configuration-> C/C++ -> Optimisation-> Optimisation du programme complet» par «Non».

5
Gank

Quiconque trouve ce fil à la recherche de réponses ... Je me suis heurté à ce problème également, mais il ne s'agissait pas d'un problème de SP1, d'un problème de reconstruction ou d'un problème PCH ... il s'agissait en fait d'une bibliothèque construite avec une version plus récente de VS essayant de se lier à un projet sur l’ancien VS. Bien que cela semble évident, VS2008 signalait qu'un objet que il avait compilé était la cause du problème qui m'avait envoyé sur une chasse à l'oie sauvage ...

3
mark

J'ai pu résoudre ce problème dans VS 2015 en procédant comme suit.

[1] (Pas certain que cela était nécessaire) Eteignez/GL dans tous les composants

C/C++> Optimisation> Optimisation du programme entier> Non

Dans les fichiers .VCXPROJ c'est:

<WholeProgramOptimization>false</WholeProgramOptimization>

Désactiver/LTCG

Bibliothécaire> Général> Génération de code de temps de lien

<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>  

[2] Étape plus importante: assurez-vous que tous les composants sont extraits des mêmes répertoires. Mon fichier EXE principal utilisait:

Release Include
$(WindowsSdkDir)include\um;$(WindowsSdkDir)include\shared;$(UniversalCRT_IncludePath);$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include
Release Library
$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);

Le .lib utilisait différents répertoires (faux):

Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86

J'ai changé les répertoires .lib pour qu'ils soient identiques à ceux du fichier .exe et l'erreur de compilation a disparu.

1
Pierre

Il se peut également que la bibliothèque incriminée ait été créée avec un paramètre "Platform Toolset" différent (dans Propriétés du projet -> Général).

1
cheburashka

J'ai eu le même problème aussi, et ma boîte Visual Studio About a signalé que SP1 était installé sur mon ordinateur. Apparemment, ce n'était pas tout à fait vrai. Une enquête sur mon occurrence spécifique à ce problème a révélé que le compilateur de ressources semblait être le coupable. Il s’agissait d’une version plus ancienne, à l’origine du message d’erreur mentionné. Mon correctif installé (mise à jour Windows) n'a pas résolu ce problème. Peut-être que j'ai raté un point crucial .....

Espérons que nous aurons une fois vécu le jour où les développeurs communiqueront le vrai problème dans leurs messages d’erreur générés. :-) 'une ancienne version d'un compilateur ....' allez les gars, vous pouvez faire mieux que ça ;-)

Quoi qu'il en soit, voici le lien de téléchargement vers le dernier SP1 pour VS2008 que j'ai utilisé pour résoudre ce problème.

http://www.Microsoft.com/downloads/en/confirmation.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

Bonne codage.

1
Eric

Vérifiez si vous avez un fichier .pch (en-tête précompilé) quelque part dans le répertoire du projet et effacez-le. puis reconstruisez le projet.
Le meilleur moyen d’obtenir une version propre consiste à utiliser Build-> Clean ou Build-> Rebuild All

Edit: Une autre chose que vous pouvez essayer et qui est plutôt à l’abri est de recréer le fichier de projet dans un nouveau répertoire à partir des fichiers source uniquement.
Si cela fonctionne, vous pouvez comparer progressivement l’ancien projet avec le nouveau pour voir ce qui ne va pas.

0
shoosh

J'ai tout essayé ici ... et mon erreur est devenue une mauvaise référence et une duplication GUID (entre 2010 et 2015 projet ... l'enfer du projet copie/passé)

Pendant la migration du projet de VS2008 à 2010 et 2015. Nous conservons toutes les versions du projet XXX.vxproj (pour VS2010) et XXX_2015.vxproj (pour VS2015).

Et dans l'une d'elles, en 2015, nous avons obtenu une référence au projet 2010!

Vérifiez donc REFERENCE ... et ne dupliquez jamais le GUID.

0
David

J'ai eu le même problème, mais une réinstallation directe ne le résout pas. J'utilisais la version trouvée ici

https://www.dreamspark.com/Products/Product.aspx?ProductId=9

Cependant, après avoir parcouru des forums, j'ai constaté que l'installation de VS2008 SP1 Express élimine ce problème. . . .

http://www.Microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=f3fbb04e-92c2-4701-b4ba-92e26e408569

Vous devez faire attention au lieu où vous téléchargez VS2008 car différentes versions du même produit Express sont disponibles au téléchargement.

0
learnvst

En référence à MSDN , cette erreur Le fichier de fichier ou de bibliothèque 'fichier' a été créé avec un compilateur plus ancien que les autres objets; la reconstruction d'anciens objets et bibliothèques est provoquée lorsque des fichiers d'objet ou des bibliothèques construits avec/LTCG sont liés, mais lorsque ces fichiers ou bibliothèques d'objet sont générés avec des versions différentes du jeu d'outils Visual C++.
Cela peut se produire si vous commencez à utiliser une nouvelle version du compilateur sans faire une reconstruction complète des fichiers objets existants ou des bibliothèques.
Pour résoudre ce problème, reconstruisez tous les fichiers objets ou les bibliothèques.

0
Anand