Errore “LINK: errore irreversibile LNK1123: errore durante la conversione in COFF: file non valido o danneggiato” dopo l’installazione di Visual Studio 2012 Release Preview

Ho installato Visual Studio 2012 Release Preview, e sembra che stia bene, ma ora quando provo a utilizzare Visual Studio 2010 per compilare progetti C ++, ottengo il seguente messaggio di errore:

LINK: errore irreversibile LNK1123: errore durante la conversione in COFF: file non valido o corrotto

Non ne sono sicuro al 100%, ma sembra essere correlato a progetti che .rc file .rc (risorse).

Ho provato a riparare Visual Studio 2010 da Aggiungi / Rimuovi programmi e riavvio, ma questo non ha alcun effetto.

Ho anche lo stesso errore se utilizzo Visual Studio 2012 RC per compilare i progetti C ++ quando si imposta l’utilizzo del set di strumenti di Visual Studio 2010. L’aggiornamento al set di strumenti di Visual Studio 2011 risolve il problema (ma ovviamente non voglio farlo per il codice di produzione).

Aggiornamento: ho disinstallato Visual Studio 2012 , riavviato e il problema persiste ancora! Aiuto!

Questo thread MSDN spiega come risolverlo.

Riassumere:

  • O disabilitare il collegamento incrementale, andando a

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

Modifiche (@CraigRinger): si noti che l’installazione di VS 2010 SP1 rimuoverà i compilatori a 64 bit . È necessario installare il pacchetto del compilatore VS 2010 SP1 per recuperarli.

Ciò riguarda Microsoft Windows SDK 7.1 per Windows 7 e .NET 4.0 e Visual Studio 2010 .

Se la disabilitazione del collegamento incrementale non funziona, e distriggersndo “Incorpora manifest” non funziona, quindi cerca nel tuo percorso più versioni di CVTRES.exe.

Facendo il debug con l’opzione linker / VERBOSE ho trovato che il linker stava scrivendo quel messaggio di errore quando ha provato a richiamare cvtres e non ha funzionato.

Si è scoperto che avevo due versioni di questa utilità nel mio percorso. Uno in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe e uno in C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe . Dopo l’installazione di VS2012, la versione VS2010 di cvtres.exe non funzionerà più. Se quello è il primo nel tuo percorso e il linker decide che è necessario convertire un file .res in formato object COFF, il collegamento fallirà con LNK1123.

(Davvero fastidioso che il messaggio di errore non abbia nulla a che fare con il problema reale, ma non è insolito per un prodotto Microsoft.)

Basta eliminare / rinominare la versione precedente dell’utilità o riordinare la variabile PATH, in modo che la versione che funziona venga prima.

Si noti che per le build di tooling x64 si può anche dover controllare C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 dove c’è un altro cvtres.exe .

Controlla la versione di cvtrs.exe :

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

Versione sbagliata:
date : 03/18/2010
time : 01:16
size : 31.048 byte
name : cvtres.exe

Versione corretta:
date : 21/02/2011
time : 06:03 PM
size : 31.056 byte
name : cvtres.exe

Se hai una versione sbagliata dovresti copiare la versione corretta da:

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

e sostituire quello qui:

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

vale a 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" 

Secondo questo thread nei forum MSDN: l’ installazione di VS2012 RC interrompe i progetti VS2010 C ++ , semplicemente, prendi cvtres.exe da VS2010 SP1

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

o da VS2012

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

e copiarlo su cvtres.exe nell’installazione RTM VS2010 (quella senza SP1 )

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

In questo modo, utilizzerai efficacemente la versione corretta di cvtres.exe che è 11.0.51106.1.

Ripeti gli stessi passaggi per la versione a 64 bit dello strumento in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe .

Questa soluzione è un’alternativa all’installazione di SP1 per VS2010 – in alcuni casi non è ansible installare SP1 (ovvero se è necessario supportare build pre-SP1).

Se è stato installato Visual Studio 2012 RC, è stato installato .NET 4.5 RC.

Disinstallare .NET 4.5 RC e installare la versione necessaria (4.0 per VS 2010). Questo dovrebbe chiarire tutti i problemi che stai avendo.

Questo ha risolto lo stesso problema. Non è necessario disinstallare Visual Studio.

È a causa di .NET Framework 4.5 che sostituisce .NET Framework 4.0. Ho disinstallato Visual Studio 2010 diverse volte senza fortuna. Quando ho rimosso .NET Framework 4.5 e reinstallato Visual Studio 2010 è andato tutto bene.

Vedi Disinstallare Visual Studio 11 completamente per fare una nuova installazione .

Per me, l’impostazione “Genera manifesto” su “No” l’ha corretta. (Corretto anche con / INCREMENTAL: NO)

Ho risolto questo problema alla fine eseguendo una disinstallazione completa di VS2012 RC, seguita da una disinstallazione completa di VS2010, quindi una reinstallazione da zero di VS2010.

Ci sono voluti per sempre, ma ora sono in grado di compilare nuovamente i progetti C ++ in VS2010.

Se stai usando x64, ecco una risorsa che ti aiuterà :

Ciò si verifica perché Microsoft .NET 4.5 non è compatibile con Visual C ++ 10. La soluzione alternativa consiste nell’assicurarsi di eseguire la versione .NET di cvtres.exe anziché la versione di Visual C ++. Ho fatto questo rinominando le versioni di Visual C ++ di quei file e copiando le versioni .NET al loro posto.

 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 

Il problema è stato magicamente risolto per me rimuovendo .NET 4.5 e sostituendolo con .NET 4.0 . Ho quindi dovuto riparare Visual Studio 2010 – in qualche modo è corrotto lungo la strada.

In precedenza avevo installato e quindi disinstallato Visual Studio 2012, che potrebbe essere correlato al problema.

Non ho installato Visual Studio 2012, ma ho ancora ricevuto questo errore in Visual Studio 2010. Ho risolto questo problema dopo aver installato Visual Studio 2010 SP1.

+1 per utente Short per una risposta che ha funzionato per me!

Ho provato a fare il debug di questo con msbuild /v:diag , e sto vedendo che MSBuild sta cercando di incorporare un manifest nel file eseguibile, con .dll.embed.manifest.res sulla riga di comando del linker, dove questo è un file di risorse creato da .dll.embed.manifest. Ma il file manifest è un file di testo Unicode vuoto. (Ovvero, un file a due byte con il prefisso Unicode 0xFEFF)

Quindi il problema di root sembra avere qualcosa a che fare con il file manifest che non viene generato, o essere usato quando .dll.intermediate.manifest avrebbe dovuto essere usato.

Una soluzione alternativa sembra essere quella di distriggersre l’opzione “Incorpora Manifest” in Proprietà, Strumento Manifest, Input e Output.

Non ha funzionato per me dopo Abilita collegamento incrementale -> “No (/ INCREMENTAL: NO)”, ma funziona per me dopo aver eliminato il file rc.

Ho avuto lo stesso problema con Microsoft Visual Studio 2010 Ultimate ed è stato risolto con il metodo descritto in questo video di YouTube

Il video suggerisce di rinominare il file cvtres.exe in C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) in cvtres-old.exe

A partire da gennaio 2014, per alcuni motivi ho installato .NET Framework 4.5.1, non so se a causa di un’installazione software di terze parti o di un aggiornamento automatico.

Il 29 gennaio, ho installato un componente e ho iniziato a ricevere il

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

Messaggio. A quel tempo, ho risolto evitando il collegamento incrementale.

Il 31 gennaio, ho installato un altro componente di .NET Framework 4.5.1 e il trucco del collegamento incrementale non ha funzionato più. Ho quindi installato Visual Studio 2010 SP1, ma in seguito il problema è diventato:

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

Penso che SP1 abbia incasinato la mia installazione di Visual Studio 2010.

Così ho disinstallato .NET Framework 4.5.1, installato .NET Framework 4.0 e disinstallato e quindi reinstallato Visual Studio 2010. Questo ha funzionato per me.

Riassumere:

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

se step1 non funziona, eseguire il passaggio 2

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

se step2 non funziona, fai il passaggio 3 Copia il file uno di:

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

    Quindi, sostituire in C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Con me, fare 3 passi funzionano

Anche a dispetto dell’installazione di Service Pack, si sta verificando l’errore, quindi provare a rimuovere / rinominare cvtres.exe nella cartella C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Questo ha funzionato per me.

Ho impostato Abilita collegamento incrementale su “No (/ INCREMENTAL: NO)” e non funziona per me .

Successivamente ho cambiato:

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

e funziona per me 🙂

Il mio problema era che avevo due percorsi sul mio PC che contenevano le stesse librerie. Entrambi i percorsi sono stati aggiunti alle Directory di libreria aggiuntive in Proprietà di configurazione -> Linker -> Generale . La rimozione di uno dei percorsi ha risolto il problema.

Ho provato un paio di volte e alla fine ho risolto il problema disinstallando più volte il VS2010. Penso di non aver disinstallato tutti i file e questo è il motivo per cui non ha funzionato per la prima volta.

Nell’installazione di VS2012, si dice che se si utilizza VS2010 SP1 non è ansible lavorare sullo stesso progetto in entrambi i programmi. Si consiglia di avere solo un programma.

Grazie!

La reinstallazione di CMake ha funzionato per me. La nuova copia di CMake ha capito che dovrebbe utilizzare Visual Studio 11 anziché 10.

Stavo usando l’SDK di Windows per la programmazione principale di Win32 e avevo installato .NET 4.5 per motivi “sconosciuti”. Ho disinstallato quello e installato 4.0 come le risposte precedenti e sì, ha funzionato anche per me.

Sono semplicemente sbalordito che ho dovuto usare il framework .NET inutile per creare app Win32 usando l’SDK.

Ho risolto questo facendo quanto segue:

  1. Nel prompt dei comandi, digita msconfig e premi invio.
  2. Fare clic sulla scheda dei servizi.
  3. Cerca “Application Experience” e metti il ​​segno di spunta (ovvero, seleziona questo per abilitare).
  4. Clicca OK. E ricominciare se necessario.

Quindi il problema andrà per sempre. Costruisci casualmente e fai il debug dei tuoi progetti C ++ senza alcun disturbo.

Per quelli di voi che cercano una soluzione per questo problema con gli esempi di codice sorgente OpenGL SuperBible 6, la soluzione sta crescendo in Release anziché in Debug . Tutti i progetti hanno disabilitato l’opzione di collegamento incrementale nella versione Release .

Ho avuto lo stesso problema dopo l’aggiornamento di .NET: ho disinstallato il framework .NET, scaricato Visual Studio da visualstudio.com e selezionato “repair”.

NET framework sono stati installati automaticamente con visual studio -> e ora funziona bene!