Question Erreur 'LINK: erreur irrécupérable LNK1123: échec lors de la conversion en COFF: fichier non valide ou endommagé' 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 irrécupérable LNK1123: échec lors de la conversion en COFF: fichier invalide ou corrompu

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

J'ai essayé de réparer Visual Studio 2010 à partir de Ajout / Suppression de programmes et de 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 défini pour utiliser le jeu d'outils Visual Studio 2010. La mise à niveau vers le jeu d'outils Visual Studio 2011 résout le problème (mais bien sûr, je ne veux pas le faire pour le code de production).

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


515
2018-06-04 21:08


origine


Réponses:


Ce fil MSDN explique comment le réparer.

Résumer:

  • Désactivez la liaison incrémentielle en accédant à

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

Edits (@CraigRinger): Notez que l'installation de VS 2010 SP1 supprimer les compilateurs 64 bits. Vous devez installer le Pack de compilateur VS 2010 SP1 pour les récupérer.

Cela affecte Microsoft Windows SDK 7.1 pour Windows 7 et .NET 4.0 aussi bien que Visual Studio 2010.


639
2018-06-05 01:19



Si la désactivation de la liaison incrémentielle ne fonctionne pas pour vous, et que la désactivation de «Embed Manifest» ne fonctionne pas non plus, recherchez votre chemin d'accès pour plusieurs versions de CVTRES.exe.

En déboguant avec l'option de l'éditeur de liens / VERBOSE, j'ai trouvé que l'éditeur de liens écrivait ce message d'erreur quand il essayait d'invoquer 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 dans votre chemin, et l'éditeur de liens décide qu'il doit convertir un fichier .res au format objet COFF, le lien échouera avec LNK1123.

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

Il suffit de supprimer / renommer l'ancienne version de l'utilitaire, ou réorganiser votre variable PATH, de sorte que la version qui fonctionne vient en premier.

Sachez que pour les builds d'outillage x64, vous devrez peut-être également vérifier C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 où il y a un autre cvtres.exe.


245
2018-01-03 18:14



Vérifiez la version de cvtrs.exe:

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

Mauvaise version:
date: 18/03/2010
time: 01:16
size: 31,048 octets
name: cvtres.exe

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


Si vous avez une mauvaise version, vous devez copier la bonne version de:

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

et remplacez celui-ci:

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"

48
2017-10-09 11:04



D'après ce fil dans les forums MSDN: L'installation VS2012 RC rompt les projets VS2010 C ++, simplement, prenez cvtres.exe de 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 le copier 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 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

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


45
2018-03-07 11:46



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.


34
2017-09-04 22:51



C'est à cause de .NET Framework 4.5 remplace .NET Framework 4.0. J'ai désinstallé Visual Studio 2010 plusieurs fois sans succès. 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 faire une nouvelle installation.


15
2018-06-18 17:14



Pour moi, définir 'Générer le manifeste' sur 'Non' l'a corrigé. (Aussi fixé avec / INCREMENTAL: NO)


14
2017-09-06 16:47



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

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


12
2018-06-04 23:09



Si vous utilisez x64, voici une ressource aidera:

Cela se produit car Microsoft .NET 4.5 est incompatible avec Visual C ++ 10. La solution consiste à s'assurer 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

12
2018-03-12 13:17