在安装Visual Studio 2012 Release Preview之后出现错误“LINK:致命错误LNK1123:在转换为COFF期间失败:文件无效或损坏”

我已经安装了Visual Studio 2012 Release Preview,看起来很好,但现在当我尝试使用Visual Studio 2010编译C ++项目时,出现以下错误消息:

链接:致命错误LNK1123:在转换为COFF时失败:文件无效或损坏

我并不十分确定这一点,但似乎与其中包含.rc (资源)文件的项目有关。

我已经尝试从“添加/删除程序”修复Visual Studio 2010并重新启动,但这没有任何作用。

如果使用Visual Studio 2012 RC编译设置为使用Visual Studio 2010工具集的C ++项目,我也会得到相同的错误。 升级到Visual Studio 2011工具集修复了这个问题(当然,我不想为生产代码这么做)。

更新:我卸载了Visual Studio 2012 ,重新启动,问题仍然存在! 帮帮我!

这个MSDN线程解释了如何解决它。

总结:

  • 要么通过去禁用增量链接

     Project Properties -> Configuration Properties -> Linker (General) -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)" 
  • 或者安装VS2010 SP1。

编辑(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器 。 您需要安装VS 2010 SP1编译器包以使其恢复。

这会影响Microsoft Windows SDK 7.1 for Windows 7和.NET 4.0以及Visual Studio 2010

如果禁用增量链接不适用于您,并且closures“Embed Manifest”也不起作用,那么请searchCVTRES.exe的多个版本。

通过使用/ VERBOSE链接器选项进行debugging,发现链接器在尝试调用cvtres时写入错误消息,失败。

事实certificate,我有我的道路上这个工具的两个版本。 一个位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe ,另一个位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe 。 VS2012安装后,VS2010版本的cvtres.exe将不再工作。 如果这是path中的第一个,并且链接器决定需要将.res文件转换为COFF对象格式,则链接将失败,并显示LNK1123。

(真的很烦人,错误信息与实际问题没有任何关系,但这对于Microsoft产品并不罕见)。

只需删除/重命名旧版本的实用程序,或重新安排您的PATHvariables,以便工作的版本首先。

请注意,对于x64工具构build,您可能还需要检查C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64哪里有另一个cvtres.exe

检查cvtrs.exe的版本:

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

错误的版本:
date :2010年3月18日
time :01:16 PM
size :31,048字节
name :cvtres.exe

正确的版本:
date :2011年2月21日
time :06:03 PM
size :31,056字节
name :cvtres.exe

如果你有错误的版本,你应该从以下版本复制正确的版本:

 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 

 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" 

根据MSDN论坛中的这个线程: VS2012 RC安装打破VS2010 C ++项目 ,简单地说,从VS2010 SP1中取出cvtres.exe

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

或来自VS2012

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

并将其复制到VS2010 RTM安装中的cvtres.exe无SP1的一个)

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

这样,您将有效地使用更正版本的cvtres.exe 11.0.51106.1。

对于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe 64位版本的工具重复相同的步骤。

此解决scheme是安装VS2010 SP1的替代scheme – 在某些情况下,您无法安装SP1(即,如果您需要支持SP1之前的版本)。

如果你已经安装了Visual Studio 2012 RC,那么它安装了.NET 4.5 RC。

卸载.NET 4.5 RC,然后安装你需要的版本(4.0 for VS 2010)。 这应该清除你有任何问题。

这解决了同样的问题。 没有必要卸载Visual Studio。

这是因为.NET Framework 4.5正在取代.NET Framework 4.0。 我几次卸载了Visual Studio 2010,但都没有运气。 当我删除.NET Framework 4.5并重新安装Visual Studio 2010时,它很好。

请参阅完全卸载Visual Studio 11以进行全新安装

对我来说,将“生成清单”设置为“否”将其固定。 (也用/ INCREMENTAL:NO固定)

我最终通过完全卸载VS2012 RC解决了这个问题,接下来是VS2010的全面卸载,然后是VS2010的重新安装。

它花了很长时间,但我现在可以在VS2010中编译C ++项目了。

如果你使用的是x64, 这里有一个资源可以帮助你 :

发生这种情况是因为Microsoft .NET 4.5与Visual C ++ 10不兼容。解决方法是确保运行cvtres.exe的.NET版本而不是Visual C ++版本。 我通过重命名这些文件的Visual C ++版本,并在他们的位置复制.NET版本。

 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 

这个问题是神奇的解决了我的.NET 4.5,取而代之的是.NET 4.0 。 然后,我不得不修复Visual Studio 2010 – 它在某种程度上正在被破坏。

我以前安装过,然后卸载Visual Studio 2012 – 这可能与问题有关。

我没有安装Visual Studio 2012,但是我仍然在Visual Studio 2010中出现这个错误。安装Visual Studio 2010 SP1后,我得到了这个解决scheme。

+1给用户简短的答案 ,为我工作!

我试图用msbuild /v:diag来做一些debugging,我发现MSBuild试图在链接器命令行中使用<somename> .dll.embed.manifest.res在可执行文件中embedded一个清单,这是从<somename> .dll.embed.manifest构build的资源文件。 但清单文件是一个空的Unicode文本文件。 (即,带有Unicode 0xFEFF前缀的两字节文件)

所以根本问题似乎与该清单文件没有被生成有关,或者当<somename> .dll.intermediate.manifest应该被使用时使用它。

替代解决scheme似乎是closures属性,清单工具,input和输出下的“embedded清单”选项。

启用增量链接 – >“否(/ INCREMENTAL:NO)”后,它没有为我工作,但它在我删除rc文件后适用于我。

截至2014年1月,由于某些原因,我安装了.NET Framework 4.5.1,不知是由于第三方软件安装还是自动更新。

1月29日,我安装了一个组件,并开始接收

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

信息。 那时候,我通过避免增量链接来解决问题。

1月31日,我安装了.NET Framework 4.5.1的另一个组件,增量链接技巧不再适用。 然后,我安装了Visual Studio 2010 SP1,但之后问题变成:

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

我认为SP1搞砸了我的Visual Studio 2010安装。

所以我卸载了.NET Framework 4.5.1,安装了.NET Framework 4.0,然后卸载,然后重新安装了Visual Studio 2010。

我与Microsoft Visual Studio 2010 Ultimate有同样的问题,并通过本YouTubevideo中描述的方法解决了这个问题

该videobuild议将c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine)文件cvtres.exe重命名为cvtres-old.exe

即使安装Service Pack您得到错误,然后尝试删除/重命名C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin文件夹中的cvtres.exe。 这对我有效。

总结:

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

如果step1不起作用,请执行Step2

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

如果step2不起作用,请执行Step3复制文件之一:

  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

    然后,replace到C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe与我,做3步它的工作

我设置启用增量链接“否(/ INCREMENTAL:NO)” ,它不适合我

接下来我改变了:

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

它适用于我:)

我的问题是,我在我的电脑上有两个包含相同库的path。 这两个path都添加到configuration属性 – >链接器 – >常规中其他库目录 。 删除其中一个path解决了这个问题。

我试了几次,终于卸载了几次VS2010解决了这个问题。 我想我没有卸载所有的文件,这就是为什么它第一次没有工作。

在VS2012的安装中,据说如果你有VS2010 SP1,你不能在两个程序中的同一个项目上工作。 build议只有一个程序。

谢谢!

重新安装CMake为我工作。 CMake的新版本发现它应该使用Visual Studio 11而不是10。

我正在使用Windows SDK进行核心Win32编程,并且因“未知”原因而安装了.NET 4.5。 我已经卸载,并安装了4.0像以前的答案,是的,它也适用于我。

只是我大吃一惊,我不得不使用无用的.NET框架来使用SDK构buildWin32应用程序。

我通过下面的方法解决了这个问题:

  1. 在命令提示符下,键入msconfig并按Enter键。
  2. 点击服务标签。
  3. 查找“应用程序体验”并放置刻度标记(即,select此项以启用)。
  4. 点击OK。 如有必要重新启动。

这样问题就会永远消失。 随机构build并debugging您的C ++项目,不受任何干扰。

对于那些使用OpenGL SuperBible第6个源代码示例寻找解决scheme的人来说,解决scheme是使用Release而不是Debug进行构build。 所有项目已禁用发行版本中的增量链接选项。

在更新.NET之后,我遇到了同样的问题:我先卸载了.NET框架,从visualstudio.com下载了visual studio,然后select了“修复”。

NET框架与视觉工作室自动安装 – >现在它工作正常!