错误’LINK:致命错误LNK1123:转换为COFF时失败:文件无效或损坏’安装Visual Studio 2012 Release Preview后

Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt' after installing Visual Studio 2012 Release Preview

我已经安装了VisualStudio 2012发布预览,它看起来很好,但是现在当我尝试使用VisualStudio 2010编译C++项目时,我得到以下错误消息:

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

我不能百分之百地肯定这一点,但它似乎与包含.rc文件(resource)的项目有关。

我已尝试从"添加/删除程序"修复Visual Studio 2010并重新启动,但这没有效果。

当使用VisualStudio 2012 RC编译C++项目时,使用VisualStudio 2010工具集时,也会遇到同样的错误。升级到Visual Studio 2011工具集可以解决此问题(当然,我不想为生产代码这样做)。

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


这个msdn线程解释了如何修复它。

总结:

  • 通过转到禁用增量链接

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

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

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


如果禁用增量链接对您不起作用,并且关闭"嵌入清单"也不起作用,那么在路径中搜索多个版本的cvtres.exe。

通过使用/verbose linker选项进行调试,我发现链接器在尝试调用cvtres时正在写入该错误消息,但失败了。

结果发现在我的路径中有两个版本的这个实用程序。一个在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe和一个在C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe处。安装vs2012之后,cvtres.exe的vs2010版本将不再工作。如果这是您路径中的第一个文件,并且链接器决定需要将.res文件转换为COFF对象格式,则链接将失败,原因是lnk123。

(很恼人的是,错误消息与实际问题无关,但这对于微软产品来说并不罕见。)

只需删除/重命名该实用程序的旧版本,或者重新排列路径变量,使工作的版本排在第一位。

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


检查cvtrs.exe版本:

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

错误版本:date2010年3月18日东十一〔10〕下午1:16size31048字节
name:cvtres.exe

正确版本:
date2011年2月21日
东十一〔10〕下午6:03size31056字节
name:cvtres.exe

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

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

换一个:

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

1
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获取EDCOX1×3

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

或者来自VS2012

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

并复制到VS2010 RTM安装中的cvtres.exe(不带sp1的安装)

1
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位版本的工具重复相同的步骤。

此解决方案是安装VS2010的SP1的替代方案-在某些情况下,您根本无法安装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以执行新安装。


对于我来说,将"生成清单"设置为"否"可以修复它。(也用/递增方式固定:否)


如果您使用的是x64,以下资源将有助于:

这是因为微软.NET 4.5与Visual C++ 10不兼容。解决方法是确保运行CVTRES.EXE的.NET版本,而不是VisualC++版本。我这样做是通过重命名这些文件的VisualC++版本并在它们的位置复制.NET版本。

1
2
3
4
5
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


我最终通过完全卸载VS2012 RC,然后完全卸载VS2010,然后重新从头安装VS2010来解决这个问题。

这花了我一辈子,但现在我又可以重新编译C++项目了。


通过删除.NET 4.5并将其替换为.NET 4.0,我神奇地解决了这个问题。然后我不得不修复Visual Studio 2010,因为它在某种程度上被破坏了。

我以前安装过Visual Studio 2012,但后来又未安装,这可能与此问题有关。


我尚未安装Visual Studio 2012,但在Visual Studio 2010中仍然出现此错误。我在安装了Visual Studio 2010 SP1之后解决了这个问题。


我对Microsoft Visual Studio 2010 Ultimate也有同样的问题,它是通过YouTube视频中描述的方法解决的。

视频建议将C:Program Files(x86)Microsoft Visual Studio 10.0vcin (in my Win7X64 matchine)中的文件cvtres.exe重命名为cvtres-old.exe。


+1对用户,简写为一个对我有用的答案!

我尝试用msbuild /v:diag对此进行一些调试,我看到msbuild正在尝试在可执行文件中嵌入清单,在链接器命令行中嵌入了.dll.embed.manifest.res,这是从0.dll.embed.manifest生成的资源文件。但是清单文件是空的Unicode文本文件。(即具有unicode 0xfeff前缀的双字节文件)

因此,根问题似乎与未生成的清单文件有关,或者与应使用.dll.intermediate.manifest时使用的清单文件有关。

另一种解决方案似乎是关闭属性、清单工具、输入和输出下的"嵌入清单"选项。


启用增量链接后,它对我不起作用->"否(/incremental:no)",但在删除rc文件后,它对我起作用。


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

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

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

消息。当时,我通过避免增量链接来解决问题。

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

1
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。这对我很有用。


总结:

1
2
3
4
5
6
Step1

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

如果步骤1不工作,请执行步骤2

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

如果步骤2不工作,请执行步骤3复制以下文件之一:

  • C:程序文件(x86)Microsoft Visual Studio11.0vcincvtres.exe文件
  • C:程序文件(x86)Microsoft Visual Studio12.0vcincvtres.exe文件
  • C:程序文件(x86)Microsoft Visual Studio13.0vcincvtres.exe文件

    然后,替换为C:Program Files(x86)Microsoft Visual Studio10.0vcincvtres.exe文件和我一起做三步


  • 即使在安装Service Pack的过程中,您也会遇到错误,然后尝试删除/重命名C:Program Files(x86)Microsoft Visual Studio 10.0vcin文件夹中的cvtres.exe。这对我很有效。


    我的问题是,我的电脑上有两条包含相同库的路径。两个路径都添加到配置属性->链接器->常规中的其他库目录中。移除其中一条路径解决了问题。


    我将启用增量链接设置为"否"(/incremental:no),但它不适用于我。

    接下来我改变了:

    1
    2
    3
    4
    Project Properties
       -> Configuration Properties
           -> General
              -> Platform Toolset ->"Visual Studio 2012 (v110)"

    它对我有用:)


    我尝试了几次,最后通过卸载几次VS2010解决了这个问题。我想我没有卸载所有的文件,这就是为什么它第一次不能工作的原因。

    在VS2012的安装中,据说如果您有VS2010 SP1,就不能在两个程序中处理同一个项目。建议只有一个程序。

    谢谢!


    我通过以下步骤解决了这个问题:

  • 在命令提示中,键入msconfig并按Enter键。
  • 单击服务选项卡。
  • 查找"应用程序体验"并打勾(即,选择此项以启用)。
  • 单击确定。必要时重新启动。
  • 因此问题将永远消失。不要随意构建和调试C++项目。


    在以前安装了Visual Studio 2010的计算机上安装了Visual Studio 2017和.NET Framework 4.6之后,出现了此问题。

    问题是,在这样的安装之后,来自C:windowssystem32的msvcr100_clr0400.dll文件被一个非常小的大小~19kb的新文件覆盖,但是前一个文件的大小~800kb。

    在我从另一台生成计算机cvtres.exe手动还原该文件后,它再次正常工作。


    我使用WindowsSDK进行核心的win32编程,并安装了.NET 4.5,原因是"未知"。我已经卸载了它,并像以前的答案一样安装了4.0,是的,它也适用于我。

    我不得不使用无用的.NET框架来构建使用SDK的Win32应用程序,这让我大吃一惊。


    对于那些正在寻找OpenGLSuperbible第6个源代码示例的解决方案的人来说,该解决方案是在版本中构建,而不是在调试中。所有项目都禁用了版本中的增量链接选项。


    在更新.NET之后,我遇到了同样的问题:我先卸载了.NET框架,已从VisualStudio.com下载Visual Studio并选择"修复"。

    NET框架是用Visual Studio->自动安装的,现在可以正常工作了!


    重新安装cmake对我很有用。cmake的新副本发现它应该使用Visual Studio 11而不是10。