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

535

Instalei o Visual Studio 2012 Release Preview e parece estar correto, 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 a conversão para COFF: arquivo inválido ou corrompido

Não tenho 100% de certeza disso, mas parece estar relacionado a projetos que possuem .rcarquivos (recursos) neles.

Tentei reparar o Visual Studio 2010 a partir de Adicionar / remover programas e reiniciar, mas isso não tem efeito.

Também recebo o mesmo erro se 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 no código de produção).

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

Orion Edwards
fonte
Este é um problema x86, x64 ou ambos? Estou vendo isso em um sistema operacional de 32 bits. Não me lembro de vê-lo em um sistema operacional de 64 bits.
jww 30/05

Respostas:

652

Este thread do MSDN explica como corrigi-lo.

Para resumir:

  • Desative a vinculação incremental, acessando

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

Edições (@CraigRinger): observe que a instalação do 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 .

Baixo
fonte
1
Encontrei este problema logo após a instalação do .Net 4.5. A instalação do VS2010 SP 1 resolveu o problema. Não instalei o VS 2012 em nenhum momento.
KJAWolf # 23/13
2
Para desativar a vinculação incremental com o CMakefile: cmake.org/pipermail/cmake/2010-February/035174.html
Map X
2
Em Qt sob Visual Studio adicionar à sua .pro: QMAKE_LFLAGS + = / INCREMENTAL: NO funcionou para mim
gollumullog
5
@grundic Mais ou menos. Renomeamos cvtres.exe do Win 7 sdk para que o link.exe não o encontre e, em vez disso, use o novo do .NET 4.5. O Windows 8 SDK não contém mais as ferramentas de linha de comando. Agora você precisa instalar pelo menos o Visual Studio 2012 Express for Desktops para obter as ferramentas de linha de comando do aplicativo de desktop. A solução de renomeação foi considerada a menos perturbadora e pode ser facilmente script.
26414 DuckPuppy
2
@DuckPuppy, felizmente, resolvemos esse problema removendo completamente o Microsoft .Net 4.5.1 de nossos agentes de compilação e instalando novamente o .Net 4.0. Depois disso, executamos a reinstalação do Microsoft SDK 7.0 com todas as opções marcadas - isso resolveu nossos problemas. Além disso, após esse incidente, desativamos as atualizações automáticas - apenas por precaução.
grundic 27/02
249

Se a desativação da vinculação incremental não funcionar para você e desativar o "Manifesto incorporado" também não, procure no seu caminho várias versões do CVTRES.exe.

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

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

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

Apenas exclua / renomeie a versão mais antiga do utilitário ou reorganize sua variável PATH, para que a versão que funcione chegue primeiro.

Esteja ciente de que, para a criação de ferramentas x64, também é necessário verificar C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64onde há outra cvtres.exe.

Morra em Sente
fonte
3
Trabalhou para mim. Obrigado por incluir a dica sobre / VERBOSE, que mostra como / por que em vez de apenas que coisa mágica fazer.
M Katz
1
Basta copiar o arquivo mais recente no diretório Framework sobre o antigo no diretório do visual studio.
Yochai Timmer
Isso resolveu meu problema também. Estou trabalhando em um computador com UAC rigoroso, e assim pude confirmar qual cvtres.exe funcionou primeiro na linha de comando. Primeiro correu onde cvtres.exe. Em seguida, "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / máquina: amd64 / verbose / out:" Nome da saída detalhada "/ somente leitura FileFromVerboutput.res. Um caminho mostrou um erro, o .NET Um funcionou. #
user176692
50

Verifique a versão de 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
size: 31.048 bytes
name: cvtres.exe

Versão correta
date:: 21/02/2011
time: 06:03 PM
size: 31.056 bytes
name: cvtres.exe

Se você tiver uma versão incorreta, copie 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

ie

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
fonte
Isso pode ajudar outras pessoas com problemas semelhantes. Estou usando o ms build e tive que copiar esses arquivos: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe De C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE para C: \ Arquivos de programas x86) \ Microsoft Visual Studio 11.0 \ VC \ bin além disso, conforme i-am-bryan.com/webs/tutorials/…
Kell
Isso funcionou para mim, mas a minha "correta" arquivo Cvtres.exe foi um tamanho diferente, data, etc. (Ainda de bin VS 2012, embora)
aampere
Para mim resolvido renomeando cvtres do diretório .... Studio 10.0 \ VC \ bin \ amd64 \. Eu acho que porque eu estou usando Intel, não AMD
Daniel Hári
46

De acordo com esta discussão em fóruns do MSDN: projetos VS2012 RC quebras de instalação VS2010 C ++ , simplesmente, tomar cvtres.exea partir VS2010 SP1

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

ou do VS2012

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

e copie-o cvtres.exena instalação do VS2010 RTM ( sem o SP1 )

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

Dessa forma, você usará efetivamente a versão corrigida cvtres.exe11.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.

Essa solução é uma alternativa à instalação do SP1 para VS2010 - em alguns casos, você simplesmente não pode instalar o SP1 (por exemplo, se precisar dar suporte a compilações anteriores ao SP1).

mloskot
fonte
1
Isso funcionou para mim. Como estou no win7 de 64 bits, copiei o cvtres.exe da pasta ... Framework64 \ v4.3 ..., mas isso não resolveu o problema. Em seguida, copiei-o da pasta Framework \ v4.3 ... e isso resolveu o problema OBRIGADO !!!!!
falconK
36

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

Desinstale o .NET 4.5 RC e instale a versão necessária (4.0 para VS 2010). Isso deve esclarecer os problemas que você está tendo.

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

B_Dubb42
fonte
4
Ótimo!! Substituí apenas o .NET 4.5 pelo .NET 4.0. e funciona bem !!
manutd
1
atualização: a desinstalação do .net 4.5 e 4.0 corrige isso para mim (VS 2010 express). no entanto, o Windows Update parece atualizar constantemente de volta para .net 4.5.1, então eu tenho que repetir isso de vez em quando. No entanto, a instalação do "VS 2010 SP1" e do voila, o VS 2010 express agora também funciona, com o .Net 4.5.1 ainda instalado.
Rogerdpack #
15

É por causa do .NET Framework 4.5 que 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.

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

AlonSamuel
fonte
3
Confim !!!!!!! Apenas reinstalar o VC2010 não ajuda. Após a exclusão do framework4.5 RC, tudo bem.
precisa saber é o seguinte
Instalei o umdh, que instala o .net 4.5, que quebrou o visual studio 2010. depois de desinstalar o .net 4.5 e reinstalar o .net 4.0, meu visual studio voltou à vida.
stu
14

Para mim, definir 'Gerar manifesto' como 'Não' o corrigiu. (Também corrigido com / INCREMENTAL: NO)

FractalSpace
fonte
14

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

Isso acontece porque o Microsoft .NET 4.5 é incompatível com o Visual C ++ 10. A solução alternativa é 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
Richard Peck
fonte
1
nota: isso funciona porque ambos .NET Framework 4 Multi-targeting pack e .NET Framework 4.5.2 estão instalados. O arquivo C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exepertence a .NET Framework 4 Multi-targeting pack. Geralmente, esse é o caso se você instalou o Windows SDK 7.1 e depois o .NET atualizado para 4.5.2. Nesse caso, você pode simplesmente mudar o nome C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exepara cvtres-old.exee o mais novo cvtres.exe(com data 30/8/17) será usado e funcionará bem.
David C. Rankin
13

Resolvi esse problema, eventualmente, fazendo uma desinstalação completa do VS2012 RC, seguida de uma desinstalação completa do VS2010 e, em seguida, uma reinstalação do zero do VS2010.

Demorou uma eternidade, mas agora sou capaz de compilar projetos C ++ no VS2010 novamente.

Orion Edwards
fonte
11

O problema foi resolvido magicamente para mim removendo o .NET 4.5 e substituindo-o pelo .NET 4.0 . Eu tive que reparar o Visual Studio 2010 - que estava sendo corrompido de alguma forma.

Eu havia instalado e desinstalado o Visual Studio 2012 - o que pode estar relacionado ao problema.

Lagarta
fonte
2
Isso funcionou para mim. Eu tenho o Net 4.5 tão importante quanto o Windows Update. Acabei de desinstalá-lo, o que fez a compilação falhar de uma nova maneira. Em seguida, consertei completamente a instalação do Visual Studio 2010 Express e resolvi o problema.
Hyde
10

Não instalei o Visual Studio 2012, mas ainda recebi esse erro no Visual Studio 2010. Resolvi isso após a instalação do Visual Studio 2010 SP1.

Saji
fonte
9

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

Sepideh Abadpour
fonte
6

+1 ao usuário Abreviação de uma resposta que funcionou para mim!

Tentei fazer uma depuração disso msbuild /v:diage estou vendo que o MSBuild está tentando incorporar um manifesto no executável, com <somename> .dll.embed.manifest.res na linha de comando do vinculador, onde esse é um recurso arquivo criado a partir de <somename> .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 arquivo de manifesto não ser gerado ou com o uso quando <somename> .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.

Morra em Sente
fonte
6

Ele não funcionou para mim depois de Ativar link incremental -> "Não (/ INCREMENTAL: NO)", mas funcionou para mim depois que eu excluí o arquivo rc.

robin.lo
fonte
5

Para resumir:

Step1

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

se o passo 1 não funcionar, execute o passo 2

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

se a etapa 2 não funcionar, copie a etapa 3 para um dos seguintes arquivos:

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

Hung Pham
fonte
4

Desde janeiro de 2014, por alguns motivos que 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.

Em 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. Naquele momento, 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 instalei o Visual Studio 2010 SP1, mas depois o problema se tornou:

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

Acho que o SP1 atrapalhou minha instalação do Visual Studio 2010.

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

JackOLantern
fonte
3

Mesmo com a instalação do Service Pack, você está recebendo o erro e 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.

nerd
fonte
Funcionou para mim. Mas não entendi como isso era um problema. Seria apreciado se você pode me dizer. Obrigado.
DTdev
2
Na resposta abaixo, @Rich Peck explicou o motivo desse comportamento.
Nerd
1

I definir Ativar Incremental Linking para "Não (/ INCREMENTAL: NO)" e não funciona para mim .

Em seguida, mudei:

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

E funciona para mim :)

sma6871
fonte
Isso não funcionará se você precisar criar um executável que seja depurável em uma plataforma WinXP.
Jay Elston
Desculpe, mas isso não é um conjunto de ferramentas solution..you estão mudando o que é um compilador completamente diferente
Semih Ozmen
1

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

naroom
fonte
1

Eu estava usando o Windows SDK para a programação principal do Win32 e tinha o .NET 4.5 instalado por razões "desconhecidas". Eu desinstalei isso e instalei o 4.0 como respostas anteriores e, sim, funcionou para mim também.

Só estou pasmo que eu precisei usar a estrutura .NET inútil para criar aplicativos Win32 usando o SDK.

Vijay Kumar Kanta
fonte
1

Resolvi isso fazendo o seguinte:

  1. Em um prompt de comando, digite msconfig e pressione enter.
  2. Clique na guia serviços.
  3. Procure "Experiência do aplicativo" e marque (ou seja, selecione para ativar).
  4. Clique OK. E reinicie se necessário.

Assim, o problema vai durar para sempre. Crie aleatoriamente e depure seus projetos C ++ sem nenhum distúrbio.

App Work
fonte
Você também pode habilitar o serviço Applicaton Experienc em services.msc
App Work
2
O que isso faz para resolver o problema?
mabraham
1

Para aqueles que procuram uma solução para esse problema com os exemplos de código-fonte do OpenGL SuperBible 6th, a solução está sendo criada na versão em vez de na depuração . Todos os projetos desativaram a opção de vinculação incremental na versão Release .

Gallo
fonte
1

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 . A remoção de um dos caminhos resolveu o problema.

mihai
fonte
1

Tive o mesmo problema após a atualização do .NET: Desinstalei o .NET Framework primeiro, baixei o visual studio do visualstudio.com e selecionei "repair".

O framework NET foi instalado automaticamente com o visual studio -> e agora funciona bem!

Aleksandr Khomenko
fonte
1

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, é dito que, se você tiver o VS2010 SP1, não poderá trabalhar no mesmo projeto nos dois programas. É recomendável ter apenas um programa.

Obrigado!

Vengage
fonte
1

Eu tive esse problema depois de instalar o Visual Studio 2017 e o .NET Framework 4.6 na máquina que anteriormente possuía o Visual Studio 2010.

O problema foi que, após essa instalação, o arquivo msvcr100_clr0400.dll de C: \ Windows \ System32 foi substituído pelo novo com um tamanho muito pequeno de ~ 19 Kb, mas o anterior foi de ~ 800 Kb.

Depois que eu restaurei o arquivo manualmente de outra máquina de compilação, o cvtres.exe começou a funcionar corretamente novamente.

Alexander Samoylov
fonte