Error 'LINK: error fatal LNK1123: falla durante la conversión a COFF: archivo no válido o dañado' después de instalar Visual Studio 2012 Release Preview

535

He instalado Visual Studio 2012 Release Preview, y parece estar bien, pero ahora cuando trato de usar Visual Studio 2010 para compilar proyectos en C ++, aparece el siguiente mensaje de error:

ENLACE: error fatal LNK1123: falla durante la conversión a COFF: archivo no válido o dañado

No estoy 100% seguro de esto, pero parece estar relacionado con proyectos que tienen .rcarchivos (de recursos) en ellos.

He intentado reparar Visual Studio 2010 desde Agregar o quitar programas y reiniciar, pero esto no tiene ningún efecto.

También obtengo el mismo error si uso Visual Studio 2012 RC para compilar los proyectos de C ++ cuando se configura para usar el conjunto de herramientas de Visual Studio 2010. La actualización al conjunto de herramientas de Visual Studio 2011 soluciona el problema (pero, por supuesto, no quiero hacer esto para el código de producción).

Actualización: desinstalé Visual Studio 2012 , reinicié, ¡y el problema aún persiste! ¡Ayuda!

Orion Edwards
fuente
¿Es este un problema x86, x64 o ambos? Lo estoy viendo en un sistema operativo de 32 bits. No recuerdo haberlo visto en un sistema operativo de 64 bits.
jww

Respuestas:

652

Este hilo de MSDN explica cómo solucionarlo.

Para resumir:

  • Deshabilite la vinculación incremental yendo a

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

Ediciones (@CraigRinger): tenga en cuenta que la instalación de VS 2010 SP1 eliminará los compiladores de 64 bits . Debe instalar el paquete del compilador VS 2010 SP1 para recuperarlos.

Esto afecta a Microsoft Windows SDK 7.1 para Windows 7 y .NET 4.0 , así como a Visual Studio 2010 .

Corto
fuente
1
Me encontré con este problema poco después de instalar .Net 4.5. La instalación de VS2010 SP 1 lo resolvió. No instalé VS 2012 en ningún momento.
KJAWolf
2
Para deshabilitar la vinculación incremental con CMakefile: cmake.org/pipermail/cmake/2010-February/035174.html
Map X
2
En Qt en Visual Studio, agregue a su .pro: QMAKE_LFLAGS + = / INCREMENTAL: NO Trabajó para mí
gollumullog
55
@grundic tipo de. Cambiamos el nombre de cvtres.exe del Win 7 sdk para que link.exe no lo encuentre y en su lugar use el nuevo de .NET 4.5. El SDK de Windows 8 ya no contiene las herramientas de línea de comandos. Ahora debe instalar al menos Visual Studio 2012 Express para escritorios para obtener las herramientas de línea de comandos de la aplicación de escritorio. La solución de cambio de nombre se consideró la menos perjudicial, y puede ser fácilmente programada.
DuckPuppy
2
@DuckPuppy, afortunadamente, resolvimos este problema eliminando por completo Microsoft .Net 4.5.1 de nuestros agentes de compilación y la instalación nueva .Net 4.0. Y después de eso ejecutamos la reinstalación de Microsoft SDK 7.0 con todas las opciones marcadas, esto resolvió nuestros problemas. Además, después de este incidente, deshabilitamos las actualizaciones automáticas, por si acaso.
grundic
249

Si deshabilitar la vinculación incremental no funciona para usted, y desactivar "Incrustar manifiesto" tampoco funciona, busque en su ruta varias versiones de CVTRES.exe.

Al depurar con la opción del vinculador / VERBOSE, descubrí que el vinculador estaba escribiendo ese mensaje de error cuando intentaba invocar cvtres y fallaba.

Resultó que tenía dos versiones de esta utilidad en mi camino. Uno a la C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exeuna C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Después de la instalación de VS2012, la versión VS2010 de cvtres.exe ya no funcionará. Si ese es el primero en su ruta, y el vinculador decide que necesita convertir un archivo .res a formato de objeto COFF, el enlace fallará con LNK1123.

(Realmente molesto que el mensaje de error no tenga nada que ver con el problema real, pero eso no es inusual para un producto de Microsoft).

Simplemente elimine / cambie el nombre de la versión anterior de la utilidad, o vuelva a organizar su variable PATH, para que la versión que funcione sea lo primero.

Tenga en cuenta que para las compilaciones de herramientas x64 también puede que tenga que comprobar C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64dónde hay otra cvtres.exe.

Muere en Sente
fuente
3
Trabajó para mi. Gracias por incluir el consejo sobre / VERBOSE, que muestra cómo / por qué en lugar de solo qué cosa mágica hacer.
M Katz
1
Simplemente copie el archivo más nuevo en el directorio de Framework sobre el anterior en el directorio de Visual Studio.
Yochai Timmer
Esto resolvió mi problema también. Estoy trabajando desde una computadora que tiene un UAC estricto, por lo que pude confirmar qué cvtres.exe funcionó primero desde la línea de comandos. Primero se ejecutó donde cvtres.exe. Luego, "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Nombre de salida detallada "/ readonly FileFromVerboutput.res. Una ruta mostró un error, el .NET uno funcionó.
user176692
50

Verifique la versión de cvtrs.exe:

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

Versión incorrecta
date: 18/03/2010
time: 01:16 PM
size: 31,048 bytes
name: cvtres.exe

Versión correcta
date: 21/02/2011
time: 06:03 PM
size: 31,056 bytes
name: cvtres.exe

Si tiene una versión incorrecta, debe copiar la versión correcta de:

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

y reemplaza el de aquí:

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

es decir

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
fuente
Esto podría ayudar a otras personas con problemas similares. Estoy usando ms build y tuve que copiar estos archivos: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe De C: \ Archivos de programa (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE a C: \ Archivos de programa ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin además de esto, según i-am-bryan.com/webs/tutorials/…
Kell
Esto funcionó para mí, pero mi archivo "cvtres.exe" correcto era de un tamaño, fecha, etc. diferente (aunque de VS 2012 bin)
aampere
Para mí resuelto renombrando cvtres de .... Studio 10.0 \ VC \ bin \ amd64 \, directorio. Creo que porque estoy usando Intel, no AMD
Daniel Hári
46

De acuerdo con este hilo en los foros de MSDN: proyectos VS2012 RC instalación se termina abruptamente VS2010 C ++ , simplemente, tomar cvtres.exedesde VS2010 SP1

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

o de VS2012

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

y cópielo sobre la instalación cvtres.exeen VS2010 RTM (la que no tiene SP1 )

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

De esta manera, utilizará efectivamente la versión corregida de la cvtres.execual es 11.0.51106.1.

Repita los mismos pasos para la versión de 64 bits de la herramienta en C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Esta solución es una alternativa a la instalación de SP1 para VS2010: en algunos casos, simplemente no puede instalar SP1 (es decir, si necesita admitir compilaciones anteriores a SP1).

mloskot
fuente
1
Eso funcionó para mí. Como estoy en win7 de 64 bits, primero copié cvtres.exe de la carpeta ... Framework64 \ v4.3 ..., pero eso no resolvió el problema. Luego lo copié de la carpeta Framework \ v4.3 ... y eso resolvió el problema. ¡GRACIAS!
halconK
36

Si ha instalado Visual Studio 2012 RC, entonces instaló .NET 4.5 RC.

Desinstale .NET 4.5 RC e instale la versión que necesita (4.0 para VS 2010). Esto debería aclarar cualquier problema que tenga.

Esto resolvió el mismo problema. No hay necesidad de desinstalar Visual Studio.

B_Dubb42
fuente
44
¡¡Excelente!! Solo reemplacé .NET 4.5 con .NET 4.0. y funciona bien !!
manutd
1
actualización: desinstalar .net 4.5 y 4.0 me lo soluciona (VS 2010 express). sin embargo, la actualización de Windows parece actualizar constantemente a .net 4.5.1, así que tengo que repetir esto de vez en cuando. Sin embargo, al instalar "VS 2010 SP1" y listo, VS 2010 express ahora también funciona, con .Net 4.5.1 todavía instalado.
rogerdpack
15

Se debe a que .NET Framework 4.5 está reemplazando a .NET Framework 4.0. Desinstalé Visual Studio 2010 varias veces sin suerte. Cuando eliminé .NET Framework 4.5 y reinstalé Visual Studio 2010, todo salió bien.

Consulte Desinstalar Visual Studio 11 por completo para realizar una instalación nueva .

AlonSamuel
fuente
3
Confimalo !!!!!!! Simplemente reinstalar VC2010 no ayuda. Después de eliminar framework4.5 RC, está bien.
inkooboo
Instalé umdh que instala .net 4.5 que rompió Visual Studio 2010. Después de desinstalar .net 4.5 y reinstalar .net 4.0, mi estudio visual volvió a la vida.
stu
14

Para mí, establecer 'Generar manifiesto' en 'No' lo solucionó. (También arreglado con / INCREMENTAL: NO)

FractalSpace
fuente
14

Si está utilizando x64, aquí hay un recurso que lo ayudará :

Esto sucede porque Microsoft .NET 4.5 es incompatible con Visual C ++ 10. La solución es garantizar que ejecute la versión .NET de cvtres.exe en lugar de la versión de Visual C ++. Lo hice cambiando el nombre de las versiones de Visual C ++ de esos archivos y copiando las versiones de .NET en su 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
fuente
1
nota: esto funciona porque ambos .NET Framework 4 Multi-targeting pack y .NET Framework 4.5.2 están instalados. El archivo C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exepertenece a .NET Framework 4 Multi-targeting pack. Este será generalmente el caso si ha instalado Windows SDK 7.1 y luego ha actualizado .NET a 4.5.2. En este caso, por lo general puede simplemente cambiar el nombre C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exede cvtres-old.exey el más reciente cvtres.exe(con fecha 08/30/17) se utilizará y el trabajo bien.
David C. Rankin
13

Finalmente resolví este problema haciendo una desinstalación completa de VS2012 RC, seguida de una desinstalación completa de VS2010, luego una reinstalación desde cero de VS2010.

Me llevó una eternidad, pero ahora puedo compilar proyectos C ++ en VS2010 nuevamente.

Orion Edwards
fuente
11

El problema se resolvió mágicamente para mí eliminando .NET 4.5 y reemplazándolo por .NET 4.0 . Luego tuve que reparar Visual Studio 2010, de alguna manera estaba dañado.

Anteriormente instalé, y luego desinstalé, Visual Studio 2012, que puede estar relacionado con el problema.

Oruga
fuente
2
Esto funcionó para mí. Obtuve la Net 4.5 como importante actualización de Windows. Simplemente lo desinstalé, lo que hizo que la compilación fallara de una nueva manera. Luego reparé completamente la instalación de Visual Studio 2010 Express , y eso solucionó el problema.
hyde
10

No he instalado Visual Studio 2012, pero aún tengo este error en Visual Studio 2010. Lo resolví después de instalar Visual Studio 2010 SP1.

Saji
fuente
9

Tuve el mismo problema con Microsoft Visual Studio 2010 Ultimate y se resolvió mediante el método descrito en este video de YouTube

El video sugiere cambiar el nombre del archivo cvtres.exe en C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) a cvtres-old.exe

Sepideh Abadpour
fuente
6

+1 al usuario Corto para una respuesta que funcionó para mí!

Intenté hacer una depuración de esto con msbuild /v:diag, y estoy viendo que MSBuild está tratando de incrustar un manifiesto en el ejecutable, con <nombre> .dll.embed.manifest.res en la línea de comando del enlazador, donde eso es un recurso archivo creado a partir de <nombre del archivo> .dll.embed.manifest. Pero el archivo de manifiesto es un archivo de texto Unicode vacío. (Es decir, un archivo de dos bytes con el prefijo Unicode 0xFEFF)

Por lo tanto, el problema raíz parece tener algo que ver con que el archivo de manifiesto no se está generando, o cuando se usa cuando <somename> .dll.intermediate.manifest debería haberse utilizado.

Una solución alternativa parece ser desactivar la opción "Incrustar manifiesto" en Propiedades, Herramienta de manifiesto, Entrada y Salida.

Muere en Sente
fuente
6

No funcionó para mí después de Habilitar la vinculación incremental -> "No (/ INCREMENTAL: NO)", pero funciona para mí después de eliminar el archivo rc.

robin.lo
fuente
5

Para resumir:

Step1

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

si el paso 1 no funciona, haga el paso 2

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

si el paso 2 no funciona, copie el archivo del Paso 3 uno de:

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

    Luego, reemplace a C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Conmigo, haga 3 pasos para que funcione

Hung Pham
fuente
4

A partir de enero de 2014, por algunas razones, instalé .NET Framework 4.5.1, no sé si debido a una instalación de software de terceros o a una actualización automática.

El 29 de enero, instalé un componente y comencé a recibir el

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

mensaje. En ese momento, resolví evitando el enlace incremental.

El 31 de enero, instalé otro componente de .NET Framework 4.5.1 y el truco del enlace incremental ya no funcionaba. Luego instalé Visual Studio 2010 SP1, pero luego el problema se convirtió en:

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

Creo que el SP1 estropeó mi instalación de Visual Studio 2010.

Así que desinstalé .NET Framework 4.5.1, instalé .NET Framework 4.0 y desinstalé y luego reinstalé Visual Studio 2010. Eso funcionó para mí.

JackOLantern
fuente
3

Incluso a pesar de instalar el Service Pack, está recibiendo el error y luego intente eliminar / cambiar el nombre de cvtres.exe en la carpeta C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Esto me ha funcionado.

nerd
fuente
Funcionó para mi. Pero no entendí cómo esto era un problema. Le agradecería que me lo dijera. Gracias.
DTdev
2
En la respuesta a continuación, @Rich Peck ha explicado la razón de este comportamiento.
nerd
1

Me puse Habilitar incremental vinculación a "n (/ incremental: NO)" y no funciona para mí .

A continuación he cambiado:

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

Y funciona para mi :)

sma6871
fuente
Esto no funcionará si necesita crear un ejecutable que sea depurable en una plataforma WinXP.
Jay Elston
lo siento, pero esto no es una solución ... estás cambiando el conjunto de herramientas que es un compilador completamente diferente
Semih Ozmen
1

Reinstalar CMake funcionó para mí. La nueva copia de CMake descubrió que debería usar Visual Studio 11 en lugar de 10.

naroom
fuente
1

Estaba usando el SDK de Windows para la programación principal de Win32 y tenía instalado .NET 4.5 por razones "desconocidas". Lo desinstalé e instalé 4.0 como respuestas anteriores y sí, también funcionó para mí.

Estoy asombrado de que tuve que usar el inútil marco .NET para crear aplicaciones Win32 usando el SDK.

Vijay Kumar Kanta
fuente
1

Resolví esto haciendo lo siguiente:

  1. En el símbolo del sistema, escriba msconfig y presione Entrar.
  2. Haga clic en la pestaña de servicios.
  3. Busque "Experiencia de aplicación" y marque (es decir, seleccione esto para habilitar).
  4. Haga clic en Aceptar. Y reinicie si es necesario.

Así el problema se irá para siempre. Construya al azar y depure sus proyectos de C ++ sin ninguna molestia.

App Work
fuente
También puede habilitar el servicio Applicaton Experienc desde services.msc
App Work
2
¿Qué hace esto para resolver el problema?
mabraham
1

Para aquellos de ustedes que buscan una solución para este problema con los ejemplos del código fuente de OpenGL SuperBible 6th, la solución se está construyendo en Release en lugar de Debug . Todos los proyectos han deshabilitado la opción de vinculación incremental en la versión Release .

Gallo
fuente
1

Mi problema era que tenía dos rutas en mi PC que contenían las mismas bibliotecas. Ambas rutas se agregaron a los Directorios de bibliotecas adicionales en Propiedades de configuración -> Vinculador -> General . Eliminar una de las rutas resolvió el problema.

mihai
fuente
1

Tuve el mismo problema después de actualizar .NET: primero desinstalé .NET Framework, descargué Visual Studio de visualstudio.com y seleccioné "reparar".

NET Framework se instaló automáticamente con Visual Studio -> y ahora funciona bien.

Aleksandr Khomenko
fuente
1

Lo intenté varias veces y finalmente resolví el problema desinstalando varias veces el VS2010. Creo que no había desinstalado todos los archivos y es por eso que no funcionó por primera vez.

En la instalación de VS2012, se dice que si tiene VS2010 SP1 no puede trabajar en el mismo proyecto en ambos programas. Se recomienda tener solo un programa.

¡Gracias!

Vengage
fuente
1

Tuve este problema después de instalar Visual Studio 2017 y .NET Framework 4.6 en la máquina que anteriormente tenía Visual Studio 2010.

El problema era que después de dicha instalación, el archivo msvcr100_clr0400.dll de C: \ Windows \ System32 se sobrescribió con el nuevo con un tamaño muy pequeño ~ 19 Kb, sin embargo, el primero era ~ 800 Kb.

Después de restaurar el archivo manualmente desde otra máquina de compilación, cvtres.exe comenzó a funcionar correctamente nuevamente.

Alexander Samoylov
fuente