Erreur «LINK: erreur fatale LNK1123: échec lors de la conversion en COFF: fichier non valide ou corrompu» après l'installation de Visual Studio 2012 Release Preview

535

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

LINK: erreur fatale 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 contiennent des .rcfichiers (de ressources).

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

J'obtiens é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!

Orion Edwards
la source
S'agit-il d'un problème x86, x64 ou les deux? Je le vois sur un système d'exploitation 32 bits. Je ne me souviens pas l'avoir vu sur un système d'exploitation 64 bits.
2017

Réponses:

652

Ce fil MSDN explique comment le corriger.

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 supprimera 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 .

Court
la source
1
J'ai rencontré ce problème peu de temps après l'installation de .Net 4.5. L'installation de VS2010 SP 1 l'a résolu. Je n'ai à aucun moment installé VS 2012.
KJAWolf
2
Pour désactiver la liaison incrémentielle avec CMakefile: cmake.org/pipermail/cmake/2010-F
Map X
2
Dans Qt sous Visual Studio, ajoutez à votre .pro: QMAKE_LFLAGS + = / INCREMENTAL: NO A travaillé pour moi
gollumullog
5
@grundic Sort of. Nous avons renommé cvtres.exe à partir du SDK Win 7 afin que link.exe ne le trouve pas et utilise à la place le nouveau à partir de .NET 4.5. Le SDK Windows 8 ne contient plus les outils de ligne de commande. Vous devez maintenant installer au moins Visual Studio 2012 Express pour ordinateurs de bureau pour obtenir les outils de ligne de commande de l'application de bureau. La solution de renommage a été jugée la moins perturbatrice et peut facilement être scriptée.
DuckPuppy
2
@DuckPuppy heureusement, nous avons résolu ce problème en supprimant complètement Microsoft .Net 4.5.1 de nos agents de construction et en installant de nouveau .Net 4.0. Et après cela, nous avons exécuté la réinstallation de Microsoft SDK 7.0 avec toutes les options marquées - cela a résolu nos problèmes. De plus, après cet incident, nous avons désactivé les mises à jour automatiques - juste au cas où.
grundic
249

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 dans votre chemin 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 lorsqu'il a tenté d'appeler cvtres et qu'il a échoué.

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.exeet 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 sur 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'a 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'outils x64, vous devrez peut-être également vérifier C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64où il en existe une autre cvtres.exe.

Die in Sente
la source
3
A travaillé pour moi. Merci d'avoir inclus l'astuce sur / VERBOSE, qui montre comment / pourquoi au lieu de simplement quelle chose magique à faire.
M Katz
1
Copiez simplement le fichier le plus récent dans le répertoire Framework sur l'ancien dans le répertoire Visual Studio.
Yochai Timmer
Cela a également résolu mon problème. Je travaille sur un ordinateur qui a un UAC strict, j'ai donc pu confirmer quel cvtres.exe fonctionnait en premier à partir de la ligne de commande. D'abord exécuté où cvtres.exe. Ensuite "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Nom de la sortie verbeuse "/ readonly FileFromVerboutput.res. Un chemin a montré une erreur, le .NET l'un a fonctionné
user176692
50

Vérifiez la version de cvtrs.exe:

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

Version incorrecte
date:: 18/03/2010
time: 01:16
size: 31 048 octets
name: cvtres.exe

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

Si vous avez une mauvaise version, vous devez copier la bonne version à 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"
Sid
la source
Cela pourrait aider d'autres personnes aux prises avec des problèmes similaires. J'utilise ms build et j'ai dû copier ces fichiers: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe De C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE vers C: \ Program Files ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin en plus de cela, selon i-am-bryan.com/webs/tutorials/…
Kell
Cela a fonctionné pour moi, mais mon fichier "correct" cvtres.exe avait une taille, une date, etc. différentes (toujours à partir de la corbeille VS 2012, cependant)
aampere
Pour moi résolu en renommant les cvtres du répertoire .... Studio 10.0 \ VC \ bin \ amd64 \. Je pense parce que j'utilise Intel, pas
AMD
46

Selon ce fil dans les forums MSDN: VS2012 pauses d'installation RC VS2010 projets C + , tout simplement, prendre cvtres.exede 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.exedans VS2010 RTM installation (celui 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 cvtres.exequi 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 à SP1).

mloskot
la source
1
Cela a fonctionné pour moi. Comme je suis sur win7 64 bits, j'ai d'abord copié cvtres.exe à partir du dossier ... Framework64 \ v4.3 ..., mais cela n'a pas résolu le problème. Puis copié à partir du dossier Framework \ v4.3 ... et cela a résolu le problème MERCI !!!!!
falconK
36

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.

B_Dubb42
la source
4
Génial!! J'ai seulement remplacé .NET 4.5 par .NET 4.0. et ça marche bien !!
2012
1
mise à jour: la désinstallation de .net 4.5 et 4.0 le résout pour moi (VS 2010 express). Cependant, la mise à jour de Windows semble constamment revenir à .net 4.5.1, je dois donc répéter cela de temps en temps. Cependant, l'installation de "VS 2010 SP1" et le tour est joué, VS 2010 express fonctionne maintenant aussi, avec .Net 4.5.1 toujours installé.
rogerdpack
15

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

AlonSamuel
la source
3
Confim it it !!!!!!! Réinstaller simplement VC2010 n'aide pas. Après la suppression de framework4.5 RC, c'est OK.
inkooboo
J'ai installé umdh qui installe .net 4.5 qui a cassé visual studio 2010. après avoir désinstallé .net 4.5 et réinstallé .net 4.0 mon studio visuel est revenu à la vie.
stu
14

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

FractalSpace
la source
14

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 de contournement consiste à vous assurer que vous exécutez la version .NET de cvtres.exe plutôt que la version Visual C ++. J'ai fait cela 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
Richard Peck
la source
1
note: cela fonctionne car les deux .NET Framework 4 Multi-targeting pack et .NET Framework 4.5.2 sont installés. Le fichier C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exeappartient à .NET Framework 4 Multi-targeting pack. Ce sera généralement le cas si vous avez installé Windows SDK 7.1 et que vous avez ensuite mis à jour .NET vers 4.5.2. Dans ce cas, vous pouvez généralement renommer simplement C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exepour cvtres-old.exeet le plus récent cvtres.exe(daté 30/08/17) sera utilisé et beau travail.
David C. Rankin
13

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.

Orion Edwards
la source
11

Le problème a été résolu comme par magie pour moi 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 corrompu en cours de route.

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

chenille
la source
2
Cela a fonctionné pour moi. J'ai obtenu le Net 4.5 en tant que mise à jour Windows importante. Je viens de le désinstaller, ce qui a fait échouer la construction d'une nouvelle manière. Ensuite, j'ai complètement réparé l' installation de Visual Studio 2010 Express , et cela a résolu le problème.
hyde
10

Je n'ai pas installé Visual Studio 2012, mais j'ai quand même eu cette erreur dans Visual Studio 2010. J'ai résolu ce problème après avoir installé Visual Studio 2010 SP1.

Saji
la source
9

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 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

Sepideh Abadpour
la source
6

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

J'ai essayé de faire un débogage de cela avec msbuild /v:diag, et je vois que MSBuild essaie d'incorporer un manifeste dans l'exécutable, avec <somename> .dll.embed.manifest.res sur la ligne de commande de l'éditeur de liens, où c'est une ressource fichier construit à partir de <nom du fichier> .dll. 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 ce fichier manifeste qui n'est pas généré, ou qu'il est utilisé lorsque <nomdomaine> .dll.intermediate.manifest aurait dû être utilisé.

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

Die in Sente
la source
6

Cela n'a pas fonctionné pour moi après Activer la liaison incrémentielle -> "Non (/ INCREMENTAL: NO)", mais cela fonctionne pour moi après avoir supprimé le fichier rc.

robin.lo
la source
5

Résumer:

Step1

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

si l'étape 1 ne fonctionne pas, faites l'étape 2

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

si l'étape 2 ne fonctionne pas, effectuez l'étape 3 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 par C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Avec moi, faites-le en 3 étapes

Hung Pham
la source
4

Depuis janvier 2014, pour certaines raisons, j'ai installé .NET Framework 4.5.1, je ne sais pas si en raison d'une installation de logiciel tiers ou d'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 en évitant le lien incrémentiel.

Le 31 janvier, j'ai 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 après, 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.

Citrouille d'Halloween
la source
3

Même malgré 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.

intello
la source
Ça a marché pour moi. Mais je n'ai pas compris comment c'était un problème. Ce serait apprécié si vous pouviez me le dire. Merci.
DTdev
2
Dans la réponse ci-dessous, @Rich Peck a expliqué la raison de ce comportement.
nerd
1

J'ai défini l' option Activer la liaison incrémentielle sur "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 :)

sma6871
la source
Cela ne fonctionnera pas si vous devez créer un exécutable pouvant être débogué sur une plate-forme WinXP.
Jay Elston
désolé mais ce n'est pas une solution .. vous changez de jeu d'outils qui est un compilateur complètement différent
Semih Ozmen
1

La réinstallation de CMake a fonctionné pour moi. La nouvelle copie de CMake a déterminé qu'elle devrait utiliser Visual Studio 11 au lieu de 10.

naroom
la source
1

J'utilisais le SDK Windows pour la programmation de base de Win32 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 sidéré que j'ai dû utiliser le cadre .NET inutile pour créer des applications Win32 à l'aide du SDK.

Vijay Kumar Kanta
la source
1

J'ai résolu ce problème en procédant comme suit:

  1. Dans une invite de commandes, tapez msconfig et appuyez sur entrée.
  2. Cliquez sur l'onglet services.
  3. Recherchez «Application Experience» et cochez (c'est-à-dire, sélectionnez-le pour l'activer).
  4. Cliquez sur OK. Et redémarrez si nécessaire.

Ainsi, le problème ira pour toujours. Construisez au hasard et déboguez vos projets C ++ sans aucune perturbation.

App Work
la source
Vous pouvez également activer le service Applicaton Experienc à partir de services.msc
App Work
2
Qu'est-ce que cela fait pour résoudre le problème?
mabraham
1

Pour ceux d'entre vous qui recherchent une solution à ce problème avec les exemples de code source d'OpenGL SuperBible 6th, 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 .

Gallo
la source
1

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 -> Éditeur de liens -> Général . La suppression d'un des chemins a résolu le problème.

mihai
la source
1

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 sur visualstudio.com et sélectionné "réparer".

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

Aleksandr Khomenko
la source
1

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!

Vengage
la source
1

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 a été remplacé par le nouveau avec une très petite taille ~ 19 Ko, mais l'ancien était ~ 800 Ko.

Après avoir restauré le fichier manuellement à partir d'une autre machine de construction, cvtres.exe a recommencé à fonctionner correctement.

Alexander Samoylov
la source