Erreur ‘LINK: erreur irrécupérable LNK1123: échec lors de la conversion en fichier 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 comstackr des projets C ++, je reçois le message d’erreur suivant:

LINK: erreur irrécupérable LNK1123: échec lors de la conversion en fichier COFF: fichier invalide ou corrompu

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

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

J’obtiens également la même erreur si j’utilise Visual Studio 2012 RC pour comstackr les projets C ++ lorsqu’ils sont définis 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 souhaite 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!

    Ce thread MSDN explique comment le résoudre.

    Résumer:

    • Désactivez la liaison incrémentielle en allant sur

       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 supprime les compilateurs 64 bits . Vous devez installer le pack de compilation VS 2010 SP1 pour les récupérer.

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

    Si la désactivation de la liaison incrémentielle ne vous convient pas et que la désactivation de “Embed Manifest” ne fonctionne pas non plus, recherchez plusieurs versions de CVTRES.exe dans votre chemin.

    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 lorsqu’il essayait d’invoquer des convertisseurs et qu’il échouait.

    Il s’est avéré que j’avais deux versions de cet utilitaire dans 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 object COFF, le lien échouera avec LNK1123.

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

    Supprimez / renommez l’ancienne version de l’utilitaire ou réorganisez votre variable PATH pour que la version qui fonctionne soit la première.

    Sachez que pour les générations d’outils x64, vous devrez peut-être également vérifier C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 où se trouve un autre cvtres.exe .

    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 : 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 version incorrecte, vous devez copier la version correcte à partir 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" 

    Selon ce fil dans les forums MSDN: L’installation VS2012 RC rompt les projets VS2010 C ++ , simplement, prenez cvtres.exe partir 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 copiez-le sur le cvtres.exe dans l’installation VS2010 RTM (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 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 au SP1).

    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 éliminer 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.

    C’est parce que .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ésinstaller Visual Studio 11 complètement pour effectuer une nouvelle installation .

    Pour moi, définir ‘Générer un manifeste’ sur ‘Non’ a résolu le problème. (Aussi corrigé avec / INCREMENTAL: NON)

    J’ai finalement résolu ce problème en procédant à une désinstallation complète de VS2012 RC, suivie d’une désinstallation complète de VS2010, puis d’une réinstallation de VS2010.

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

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

    Cela se produit car Microsoft .NET 4.5 est incompatible avec Visual C ++ 10. La solution consiste à vous assurer que vous exécutez la version .NET de cvtres.exe plutôt que la version de 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 

    Le problème a été résolu 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 en cours de route.

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

    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.

    +1 à l’utilisateur Short pour une réponse qui a fonctionné pour moi!

    J’ai essayé de déboguer ceci avec msbuild /v:diag , et je vois que MSBuild essaye d’incorporer un manifeste dans l’exécutable, avec .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 .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)

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

    Une autre solution semble être de désactiver l’option “Embed Manifest” sous Properties, Manifest Tool, Input et Output.

    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.

    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.

    En janvier 2014, pour certaines raisons, j’ai installé .NET Framework 4.5.1, je ne sais pas si cela est dû à une installation de 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. A cette époque, j’ai résolu en évitant le lien incrémentiel.

    Le 31 janvier, j’ai installé un autre composant de .NET Framework 4.5.1 et le truc de lien incrémentiel ne fonctionnait plus. J’ai ensuite installé Visual Studio 2010 SP1, mais après, le problème est devenu:

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

    Je pense que le SP1 a perturbé 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.

    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, faites Step3 Copiez le fichier parmi:

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

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

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

    Je mets Enable Incremental Linking sur “No (/ 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 🙂

    Mon problème était que j’avais deux chemins sur mon PC qui contenaient les mêmes bibliothèques. Les deux chemins ont été ajoutés aux répertoires de bibliothèque supplémentaires dans Propriétés de configuration -> Linker -> General . La suppression d’un des chemins a résolu le problème.

    J’ai essayé plusieurs fois et finalement résolu le problème en désinstallant plusieurs fois le VS2010. Je pense que je n’avais 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!

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

    J’utilisais le SDK Windows pour la programmation Win32 principale et j’avais .NET 4.5 installé 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 juste stupéfait d’avoir à utiliser le framework .NET inutile pour créer des applications Win32 à l’aide du SDK.

    J’ai résolu ce problème 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 “Expérience de l’application” et cochez la case (c’est-à-dire sélectionnez cette option pour l’activer).
    4. Cliquez sur OK. Et redémarrer 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.

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

    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é le studio visuel de visualstudio.com et sélectionné “repair”.

    NET Framework ont ​​été installés automatiquement avec Visual Studio -> et maintenant ça marche bien!