web-dev-qa-db-fra.com

Erreur 'LINK: erreur irrécupérable LNK1123: échec de la conversion au format COFF: fichier non valide ou corrompu' après l'installation de Visual Studio 2012 Release Preview

J'ai installé Visual Studio 2012 Release Preview et cela semble aller, mais maintenant, lorsque j'essaie d'utiliser Visual Studio 2010 pour compiler des projets C++, le message d'erreur suivant s'affiche:

LINK: erreur fatale LNK1123: échec lors de la conversion en COFF: fichier non valide ou corrompu

Je ne suis pas sûr à 100% de cela, mais cela semble être lié aux projets qui contiennent des fichiers .rc (ressource).

J'ai essayé de réparer Visual Studio 2010 à partir de Ajout/Suppression de programmes et de le redémarrer, mais cela n'a aucun effet.

Je reçois également la même erreur si j'utilise Visual Studio 2012 RC pour compiler les projets C++ lorsqu'il est configuré pour utiliser le jeu d'outils Visual Studio 2010. La mise à niveau vers le jeu d'outils Visual Studio 2011 corrige le problème (mais je ne souhaite évidemment pas le faire pour le code de production).

Mise à jour: J'ai désinstallé Visual Studio 2012 , redémarré et le problème persiste! Aidez-moi!

526
Orion Edwards

Ce fil MSDN explique comment résoudre ce problème.

Résumer: 

  • Soit désactiver la liaison incrémentielle, en allant à 

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • ou installez VS2010 SP1.

Modifications (@CraigRinger): notez que l'installation de VS 2010 SP1 aura pour résultat supprimer les compilateurs 64 bits}. Vous devez installer le pack de compilateur VS 2010 SP1 pour les récupérer.

Cela concerne Microsoft Windows SDK 7.1 pour Windows 7 et .NET 4.0 ainsi que Visual Studio 2010.

647
Short

Si la désactivation de la liaison incrémentielle ne fonctionne pas pour vous et que la désactivation du "manifeste d'intégration" ne fonctionne pas non plus, recherchez dans votre chemin plusieurs versions de CVTRES.exe.

En déboguant avec l'option de l'éditeur de liens/VERBOSE, j'ai découvert que l'éditeur de liens écrivait ce message d'erreur lorsqu'il tentait d'appeler cvtres et qu'il échouait.

Il s'est avéré que j'avais deux versions de cet utilitaire sur mon chemin. Un à C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe et un à C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Après l’installation de VS2012, la version VS2010 de cvtres.exe ne fonctionnera plus. Si c'est le premier de votre chemin et que l'éditeur de liens décide qu'il doit convertir un fichier .res au format d'objet COFF, le lien échouera avec LNK1123.

(Vraiment ennuyeux que le message d'erreur n'ait rien à voir avec le problème réel, mais ce n'est pas inhabituel pour un produit Microsoft.)

Supprimez/renommez simplement l'ancienne version de l'utilitaire ou réorganisez votre variable PATH afin que la version qui fonctionne vienne en premier.

Sachez que pour les versions d'outillage x64, vous devrez peut-être aussi cocher C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\AMD64 s'il existe un autre cvtres.exe.

247
Die in Sente

Vérifiez la version de cvtrs.exe:

dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"

Mauvaise version:
date: 03/18/2010
time: 13h16
size: 31 048 octets 
name: cvtres.exe

Version correcte:
date: 21/02/2011
time: 18h03
size: 31,056 octets 
name: cvtres.exe

Si vous avez une mauvaise version, vous devez copier la version correcte à partir de:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

et remplacez celui ici:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

c'est à dire.

copy "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"
49
Sid

Selon ce fil dans les forums MSDN: L'installation de VS2012 RC interrompt les projets VS2010 C++ , prenez simplement cvtres.exe dans VS2010 SP1

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

ou de VS2012

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

et copiez-le sur le cvtres.exe dans VS2010 RTM installation (celle sans SP1)

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

De cette façon, vous utiliserez efficacement la version corrigée de cvtres.exe qui est 11.0.51106.1.

Répétez les mêmes étapes pour la version 64 bits de l'outil dans C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\AMD64\cvtres.exe.

Cette solution est une alternative à l’installation du SP1 pour VS2010. Dans certains cas, vous ne pouvez tout simplement pas installer le SP1 (c’est-à-dire si vous devez prendre en charge les versions antérieures à SP1).

45
mloskot

Si vous avez installé Visual Studio 2012 RC, il a installé .NET 4.5 RC.

Désinstallez .NET 4.5 RC et installez la version dont vous avez besoin (4.0 pour VS 2010). Cela devrait éclaircir tous les problèmes que vous rencontrez.

Cela a résolu le même problème. Il n'est pas nécessaire de désinstaller Visual Studio.

35
B_Dubb86

C’est parce que .NET Framework 4.5 remplace .NET Framework 4.0 . Lorsque j'ai supprimé .NET Framework 4.5 et réinstallé Visual Studio 2010, tout s'est bien passé.

Voir Désinstallez complètement Visual Studio 11 pour effectuer une nouvelle installation.

15
AlonSamuel

Pour moi, régler "Générer le manifeste" sur "Non" l'a corrigé. (Également corrigé avec/INCREMENTAL: NO)

14
FractalSpace

Si vous utilisez x64, voici une ressource qui vous aidera :

Cela est dû au fait que Microsoft .NET 4.5 est incompatible avec Visual C++ 10. La solution consiste à vérifier que vous exécutez la version .NET de cvtres.exe plutôt que la version Visual C++. Je l'ai fait en renommant les versions Visual C++ de ces fichiers et en copiant les versions .NET à leur place.

1. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
2. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\AMD64\cvtres.exe

1. C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
2. C:\windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe
13
Richard Peck

J'ai finalement résolu ce problème en effectuant une désinstallation complète de VS2012 RC, suivie d'une désinstallation complète de VS2010, puis d'une réinstallation à partir de zéro de VS2010.

Cela a pris une éternité, mais je suis maintenant en mesure de compiler à nouveau des projets C++ dans VS2010.

12
Orion Edwards

Le problème a été résolu comme par magie en supprimant .NET 4.5 et en le remplaçant par .NET 4.0. J'ai ensuite dû réparer Visual Studio 2010 - il était en quelque sorte corrompu.

J'avais précédemment installé, puis désinstallé, Visual Studio 2012 - ce qui peut être lié au problème.

11
Caterpillar

Je n'ai pas installé Visual Studio 2012, mais j'ai toujours cette erreur dans Visual Studio 2010. Je l'ai résolu après l'installation de Visual Studio 2010 SP1.

10
Saji

J'ai eu le même problème avec Microsoft Visual Studio 2010 Ultimate et il a été résolu par la méthode décrite dans cette vidéo sur youtube

La vidéo suggère de renommer le fichier cvtres.exe dans C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin(in my Win7X64 matchine) en cvtres-old.exe

8
sepideh

+1 à l'utilisateur Court pour une réponse qui a fonctionné pour moi!

J'ai essayé de déboguer cela avec msbuild /v:diag, et je constate que MSBuild tente d'incorporer un manifeste dans l'exécutable, avec <quelque chose> .dll.embed.manifest.res sur la ligne de commande de l'éditeur de liens, où il s’agit d’un fichier de ressources construit à partir de <quelque chose> .dll.embed.manifest. Mais le fichier manifeste est un fichier texte Unicode vide. (C'est-à-dire un fichier de deux octets avec le préfixe Unicode 0xFEFF)

Ainsi, le problème racine semble avoir quelque chose à voir avec le fait que ce fichier manifeste n'est pas généré ou qu'il est utilisé lorsque <quelque chose> .dll.intermediate.manifest aurait dû être utilisé.

Une autre solution semble être de désactiver l'option "Incorporer le manifeste" sous Propriétés, Outil de manifeste, Entrée et Sortie.

6
Die in Sente

Cela n'a pas fonctionné pour moi après l'activation de la liaison incrémentielle -> "Non (/ INCREMENTAL: NO)", mais cela fonctionne pour moi après la suppression du fichier rc.

5
robin.lo

Depuis janvier 2014, pour certaines raisons, j'ai été installé .NET Framework 4.5.1, je ne sais pas s'il est dû à l'installation d'un logiciel tiers ou à une mise à jour automatique 

Le 29 janvier, j'ai installé un composant et j'ai commencé à recevoir le 

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 

message. À ce moment-là, j'ai résolu le problème en évitant le lien incrémental. 

Le 31 janvier, on m'a installé un autre composant de .NET Framework 4.5.1 et l'astuce de lien incrémentiel ne fonctionnait plus. J'ai ensuite installé Visual Studio 2010 SP1, mais le problème est devenu: 

Error   6   error LNK1104: cannot open file 'msvcrtd.lib'. 

Je pense que le SP1 a gâché mon installation de Visual Studio 2010. 

J'ai donc désinstallé .NET Framework 4.5.1, installé .NET Framework 4.0 et désinstallé puis réinstallé Visual Studio 2010. Cela a fonctionné pour moi.

4
JackOLantern

Résumer:

Step1

Project Properties 
   -> Configuration Properties 
       -> Linker (General) 
          -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"

si step1 ne fonctionne pas, faites Step2

Project Properties 
   -> Configuration Properties 
       -> Manifest Tool (Input and Output) 
          -> Enable Incremental Linking -> "No"

si step2 ne fonctionne pas, effectuez Step3 Copiez le fichier l’un des suivants:

  1. C:\Fichiers de programme (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe
  2. C:\Fichiers de programme (x86)\Microsoft Visual Studio 12.0\VC\bin\cvtres.exe
  3. C:\Fichiers de programme (x86)\Microsoft Visual Studio 13.0\VC\bin\cvtres.exe

    Ensuite, remplacez par C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe Avec moi, faites-le en 3 étapes

4
Hung Pham

Même en dépit de l'installation du Service Pack, vous obtenez l'erreur, puis essayez de supprimer/renommer cvtres.exe dans le dossier C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin. Cela a fonctionné pour moi.

2
nerd

Mon problème était que j'ai eu deux chemins sur mon PC qui contenaient les mêmes bibliothèques. Les deux chemins ont été ajoutés au Répertoires de bibliothèque supplémentaires dans Propriétés de configuration -> Éditeur de liens -> Général . Supprimer l'un des chemins a résolu le problème.

1
mihai

J'ai essayé plusieurs fois et j'ai finalement résolu le problème en désinstallant plusieurs fois le VS2010. Je pense que je n'ai pas désinstallé tous les fichiers et c'est pourquoi cela n'a pas fonctionné pour la première fois. 

Dans l'installation de VS2012, il est dit que si vous avez VS2010 SP1, vous ne pouvez pas travailler sur le même projet dans les deux programmes. Il est recommandé de n'avoir qu'un seul programme. 

Merci!

1
Vengage

Je règle Activer la liaison incrémentielle à "Non (/ INCREMENTAL: NO)" et cela ne fonctionne pas pour moi.

Ensuite j'ai changé:

Project Properties 
   -> Configuration Properties 
       -> General
          -> Platform Toolset -> "Visual Studio 2012 (v110)"

et cela fonctionne pour moi :)

1
sma6871

J'utilisais le Kit de développement logiciel (SDK) Windows pour la programmation Win32 principale et j'avais installé .NET 4.5 pour des raisons "inconnues". J'ai désinstallé cela et installé 4.0 comme les réponses précédentes et oui, cela a fonctionné pour moi aussi.

Je suis simplement sidérée de devoir utiliser le framework .NET inutile pour créer des applications Win32 à l'aide du SDK.

0
Vijay Kumar Kanta

J'ai eu le même problème après la mise à jour de .NET: J'ai d'abord désinstallé le framework .NET, Téléchargé Visual Studio depuis visualstudio.com et sélectionné "réparation". 

NET Framework a été installé automatiquement avec Visual Studio -> et maintenant cela fonctionne bien!

0
Aleksandr Khomenko

J'ai eu ce problème après avoir installé Visual Studio 2017 et .NET Framework 4.6 sur la machine qui avait précédemment Visual Studio 2010.

Le problème était qu’après une telle installation, le fichier msvcr100_clr0400.dll de C:\Windows\System32 était écrasé par le nouveau fichier de très petite taille, environ 19 Ko.

Après avoir restauré manuellement le fichier à partir d’une autre machine de compilation, cvtres.exe a de nouveau fonctionné correctement.

0
Alexander Samoylov

J'ai résolu ceci en procédant comme suit:

  1. Dans une invite de commande, tapez msconfig et appuyez sur Entrée.
  2. Cliquez sur l'onglet Services. 
  3. Recherchez "Application Experience" et cochez (c’est-à-dire, cochez cette case pour activer) 
  4. Cliquez sur OK. Et redémarrez si nécessaire.

Ainsi, le problème ira pour toujours. Construisez de manière aléatoire et déboguez vos projets C++ sans aucune perturbation.

0
App Work

Pour ceux d'entre vous qui recherchent une solution à ce problème avec les exemples de code source OpenGL SuperBible 6th, la solution consiste à créer Release au lieu de Debug . Tous les projets ont désactivé l'option de liaison incrémentielle dans la version Release .

0
Gallo

Réinstaller CMake a fonctionné pour moi. La nouvelle copie de CMake a déterminé qu'elle devait utiliser Visual Studio 11 au lieu de 10.

0
naroom