Erro ‘LINK: erro fatal LNK1123: falha durante a conversão para COFF: arquivo inválido ou corrompido’ após a instalação do Visual Studio 2012 Release Preview

Eu instalei o Visual Studio 2012 Release Preview, e parece estar bem, mas agora, quando tento usar o Visual Studio 2010 para compilar projetos C ++, recebo a seguinte mensagem de erro:

LINK: erro fatal LNK1123: falha durante conversão para COFF: arquivo inválido ou corrompido

Eu não tenho 100% de certeza disso, mas parece estar relacionado a projetos que possuem arquivos .rc (resources) neles.

Eu tentei reparar o Visual Studio 2010 de Adicionar / Remover programas e reinicializar, mas isso não tem efeito.

Eu também recebo o mesmo erro se eu usar o Visual Studio 2012 RC para compilar os projetos C ++ quando definido para usar o conjunto de ferramentas do Visual Studio 2010. A atualização para o conjunto de ferramentas do Visual Studio 2011 corrige o problema (mas é claro que não quero fazer isso para o código de produção).

Atualização: Eu desinstalei o Visual Studio 2012 , reiniciei e o problema ainda persiste! Socorro!

Este tópico do MSDN explica como corrigi-lo.

Para resumir:

  • Desativar a vinculação incremental, indo para

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

Edits (@CraigRinger): Observe que instalar o VS 2010 SP1 removerá os compiladores de 64 bits . Você precisa instalar o pacote do compilador do VS 2010 SP1 para recuperá-los.

Isso afeta o Microsoft Windows SDK 7.1 para Windows 7 e .NET 4.0 , bem como o Visual Studio 2010 .

Se a desativação da vinculação incremental não funcionar para você e a desativação do “Embed Manifest” também não funcionar, pesquise seu caminho em várias versões do CVTRES.exe.

Ao depurar com a opção de vinculador / VERBOSE, descobri que o vinculador estava gravando essa mensagem de erro quando tentou invocar cvtres e ela falhou.

Descobri que eu tinha duas versões deste utilitário no meu caminho. Um em C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe e um em C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe . Após a instalação do VS2012, a versão VS2010 do cvtres.exe não funcionará mais. Se esse for o primeiro em seu caminho e o vinculador decidir que precisa converter um arquivo .res para o formato de object COFF, o link falhará com o LNK1123.

(Realmente irritante que a mensagem de erro não tem nada a ver com o problema real, mas isso não é incomum para um produto da Microsoft.)

Basta excluir / renomear a versão mais antiga do utilitário ou reorganizar sua variável PATH, para que a versão que funciona seja a primeira.

Lembre-se de que, para construções de ferramentas x64, você também pode precisar verificar C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 onde há outro cvtres.exe .

Verifique a versão do cvtrs.exe :

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

Versão errada:
date : 18/03/2010
time : 01:16 PM
size : 31,048 bytes
name : cvtres.exe

Versão correta:
date : 21/02/2011
time : 18:03
size : 31,056 bytes
name : cvtres.exe

Se você tem uma versão errada, você deve copiar a versão correta de:

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

e substitua o aqui:

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

ou seja

 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" 

De acordo com esta discussão em fóruns do MSDN: VS2012 RC quebra de instalação VS2010 C ++ projetos , basta, cvtres.exe tomar 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 

e copie-o sobre o cvtres.exe na instalação do VS2010 RTM (aquele sem o SP1 )

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

Dessa forma, você efetivamente usará a versão corrigida do cvtres.exe que é 11.0.51106.1.

Repita as mesmas etapas para a versão de 64 bits da ferramenta em C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe .

Esta solução é uma alternativa à instalação do SP1 para o VS2010 – em alguns casos, você simplesmente não pode instalar o SP1 (ou seja, se precisar dar suporte a versões pré-SP1).

Se você instalou o Visual Studio 2012 RC, ele instalou o .NET 4.5 RC.

Desinstale o .NET 4.5 RC e instale a versão que você precisa (4.0 para o VS 2010). Isso deve esclarecer qualquer problema que você esteja tendo.

Isso resolveu o mesmo problema. Não há necessidade de desinstalar o Visual Studio.

É porque o .NET Framework 4.5 está substituindo o .NET Framework 4.0. Desinstalei o Visual Studio 2010 várias vezes sem sorte. Quando removi o .NET Framework 4.5 e reinstalei o Visual Studio 2010, tudo correu bem.

Veja Desinstalar o Visual Studio 11 completamente para fazer uma nova instalação .

Para mim, definir ‘Gerar manifesto’ como ‘Não’ corrigiu. (Também corrigido com / INCREMENTAL: NÃO)

Eu resolvi esse problema, eventualmente, fazendo uma desinstalação completa do VS2012 RC, seguido por uma desinstalação completa do VS2010, em seguida, uma reinstalação a partir do zero do VS2010.

Demorou para sempre, mas agora sou capaz de compilar projetos C ++ no VS2010 novamente.

Se você estiver usando x64, veja um recurso que ajudará :

Isso acontece porque o Microsoft .NET 4.5 é incompatível com o Visual C ++ 10. A solução é garantir que você execute a versão .NET do cvtres.exe em vez da versão do Visual C ++. Eu fiz isso renomeando as versões do Visual C ++ desses arquivos e copiando as versões do .NET em seu lugar.

 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 

O problema foi resolvido magicamente para mim removendo o .NET 4.5 e substituindo-o pelo .NET 4.0 . Eu então tive que reparar o Visual Studio 2010 – sendo corrompido ao longo do caminho de alguma forma.

Eu tinha instalado anteriormente e, em seguida, não instalado, o Visual Studio 2012 – que pode estar relacionado ao problema.

Eu não instalei o Visual Studio 2012, mas eu ainda tenho esse erro no Visual Studio 2010. Eu tenho isso resolvido depois de instalar o Visual Studio 2010 SP1.

+1 para o usuário Curto por uma resposta que funcionou para mim!

Eu tentei fazer alguma debugging disso com msbuild /v:diag , e estou vendo que o MSBuild está tentando incorporar um manifesto no executável, com .dll.embed.manifest.res na linha de comando do vinculador, onde esse é um arquivo de recurso criado a partir de .dll.embed.manifest. Mas o arquivo de manifesto é um arquivo de texto Unicode vazio. (Ou seja, um arquivo de dois bytes com o prefixo Unicode 0xFEFF)

Portanto, o problema raiz parece ter algo a ver com o fato de que o arquivo de manifesto não está sendo gerado, ou está sendo usado quando o .dll.intermediate.manifest deveria ter sido usado.

Uma solução alternativa parece ser desativar a opção “Incorporar Manifesto” em Propriedades, Ferramenta de manifesto, Entrada e Saída.

Não funcionou para mim depois de Enable Incremental Linking -> “Não (/ INCREMENTAL: NO)”, mas funciona para mim depois que eu deletei o arquivo rc.

Eu tive o mesmo problema com o Microsoft Visual Studio 2010 Ultimate e foi resolvido pelo método descrito neste vídeo do youtube

O vídeo sugere renomear o arquivo cvtres.exe em C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) para cvtres-old.exe

Em janeiro de 2014, por alguns motivos, instalei o .NET Framework 4.5.1, não sei se devido a uma instalação de software de terceiros ou a uma atualização automática.

No dia 29 de janeiro, instalei um componente e comecei a receber o

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

mensagem. Naquela época, resolvi evitando o link incremental.

Em 31 de janeiro, instalei outro componente do .NET Framework 4.5.1 e o truque de link incremental não funcionou mais. Eu então instalei o Visual Studio 2010 SP1, mas depois o problema se tornou:

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

Eu acho que o SP1 bagunçou minha instalação do Visual Studio 2010.

Então, eu desinstalei o .NET Framework 4.5.1, instalei o .NET Framework 4.0, desinstalei e reinstalei o Visual Studio 2010. Isso funcionou para mim.

Para resumir:

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

se step1 não funcionar, faça Step2

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

se step2 não funcionar, faça Step3 Copie o arquivo um de:

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

    Em seguida, substitua para C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Comigo, execute o passo 3

Mesmo apesar de instalar o Service Pack, você está recebendo o erro e, em seguida, tente remover / renomear o cvtres.exe na pasta C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Isso tem funcionado para mim.

Eu configurei Enable Incremental Linking para “No (/ INCREMENTAL: NO)” e não funciona para mim .

Em seguida eu mudei:

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

E funciona para mim 🙂

Meu problema era que eu tinha dois caminhos no meu PC que continham as mesmas bibliotecas. Ambos os caminhos foram adicionados aos Diretórios Adicionais da Biblioteca em Propriedades de Configuração -> Vinculador -> Geral . Remover um dos caminhos resolveu o problema.

Eu tentei algumas vezes e finalmente resolvi o problema, desinstalando várias vezes o VS2010. Eu acho que não tinha desinstalado todos os arquivos e é por isso que não funcionou pela primeira vez.

Na instalação do VS2012, diz-se que se você tiver VS2010 SP1 você não pode trabalhar no mesmo projeto em ambos os programas. Recomenda-se ter apenas um programa.

Obrigado!

Reinstalar o CMake funcionou para mim. A nova cópia do CMake descobriu que deveria usar o Visual Studio 11 em vez de 10.

Eu estava usando o Windows SDK para a programação principal do Win32 e tinha o .NET 4.5 instalado por motivos “desconhecidos”. Eu desinstalei e instalei 4.0 como respostas anteriores e, sim, funcionou para mim também.

Apenas estou espantado por ter que usar a estrutura .NET inútil para criar aplicativos Win32 usando o SDK.

Eu resolvi isso fazendo o seguinte:

  1. Em um prompt de comando, digite msconfig e pressione Enter.
  2. Clique na guia de serviços.
  3. Procure por “Experiência de aplicativo” e coloque a marca de seleção (ou seja, selecione esta opção para ativar).
  4. Clique OK. E reinicie se necessário.

Assim o problema irá para sempre. Construa aleatoriamente e depure seus projetos C ++ sem qualquer perturbação.

Para aqueles que estão procurando uma solução para esse problema com as amostras de código-fonte OpenGL SuperBible da 6ª, a solução está sendo desenvolvida em Release, em vez de Debug . Todos os projetos desativaram a opção de vinculação incremental na versão Release .

Eu tive o mesmo problema após a atualização do .NET: Eu desinstalei o .NET framework primeiro, baixei o visual studio do visualstudio.com e selecionei “repair”.

NET framework foram instalados automaticamente com visual studio -> e agora funciona bem!