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

时间:2012-06-04 21:08:41

标签: visual-studio-2010 visual-studio visual-studio-2012

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

  

LINK:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏

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

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

如果在设置为使用Visual Studio 2010工具集时使用Visual Studio 2012 RC编译C ++项目,也会出现相同的错误。升级到Visual Studio 2011工具集可以解决问题(但我当然不希望为生产代码执行此操作)。

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

26 个答案:

答案 0 :(得分:650)

This MSDN thread解释了如何修复它。

总结:

  • 通过转到

    禁用增量链接
    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • 或安装VS2010 SP1。

Edits(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器。您需要安装VS 2010 SP1 compiler pack才能取回它们。

这会影响适用于Windows 7和.NET 4.0的Microsoft Windows SDK 7.1 以及 Visual Studio 2010

答案 1 :(得分:249)

如果禁用增量链接对您不起作用,并且关闭“Embed Manifest”也不起作用,则在路径中搜索CVTRES.exe的多个版本。

通过使用/ VERBOSE链接器选项进行调试,我发现链接器在尝试调用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后,VS2010版本的cvtres.exe将不再有效。如果这是您路径中的第一个,并且链接器决定它需要将.res文件转换为COFF对象格式,则链接将因LNK1123而失败。

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

只需删除/重命名旧版本的实用程序,或重新排列PATH变量,以便首先使用适用的版本。

请注意,对于x64工具构建,您可能还需要检查C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64其他cvtres.exe的位置。

答案 2 :(得分:49)

检查cvtrs.exe的版本:

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

错误的版本:
date:03/18/2010
time:01:16 PM
size:31,048字节
name:cvtres.exe

正确版本:
date:02/21/2011
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"

答案 3 :(得分:45)

根据MSDN论坛中的这个帖子:VS2012 RC installation breaks VS2010 C++ projects,只需从 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位版本工具重复相同的步骤。

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

答案 4 :(得分:35)

如果您已安装Visual Studio 2012 RC,则它安装了.NET 4.5 RC。

卸载.NET 4.5 RC,并安装所需的版本(适用于VS 2010的4.0)。这应该可以解决你遇到的任何问题。

这解决了同样的问题。无需卸载Visual Studio。

答案 5 :(得分:15)

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

请参阅 Uninstall Visual Studio 11 completely to do a fresh install

答案 6 :(得分:14)

对我来说,将'Generate Manifest'设置为'No'可以修复它。 (也用/ INCREMENTAL:NO修复)

答案 7 :(得分:13)

如果您使用的是x64,here's a resource will help

这是因为Microsoft .NET 4.5与Visual C ++ 10不兼容。解决方法是确保运行.NET版本的cvtres.exe而不是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

答案 8 :(得分:12)

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

花了很长时间,但我现在能够再次在VS2010中编译C ++项目。

答案 9 :(得分:11)

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

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

答案 10 :(得分:10)

我没有安装Visual Studio 2012,但我在Visual Studio 2010中仍然遇到此错误。我在安装Visual Studio 2010 SP1后解决了此问题。

答案 11 :(得分:8)

我在 Microsoft Visual Studio 2010 Ultimate 时遇到了同样的问题,它是通过this youtube video

中描述的方法解决的

该视频建议在 C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine)中重命名文件 cvtres.exe cvtres-old.exe

答案 12 :(得分:6)

+1用户an answer的缩写,适用于我!

我尝试使用msbuild /v:diag对此进行一些调试,我发现MSBuild正在尝试在可执行文件中嵌入清单,其中包含< somename> .dll.embed.manifest链接器命令行上的.res,它是从< somename> .dll.embed.manifest构建的资源文件。但清单文件是一个空的Unicode文本文件。 (即,带有Unicode 0xFEFF前缀的双字节文件)

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

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

答案 13 :(得分:5)

启用增量链接后,它对我无效 - > “不(/ INCREMENTAL:NO)”,但删除rc文件后它对我有用。

答案 14 :(得分:4)

总结:

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

    然后,替换为C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ BIN \的Cvtres.exe 和我一起,做3步吧

答案 15 :(得分:4)

截至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.这对我有用。

答案 16 :(得分:2)

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

答案 17 :(得分:1)

我将启用增量链接设置为“否(/ INCREMENTAL:NO)”对我不起作用

接下来我改变了:

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

它适用于我:)

答案 18 :(得分:1)

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

在VS2012的安装中,据说如果您有VS2010 SP1,则无法在两个程序中使用同一个项目。建议只有一个程序。

谢谢!

答案 19 :(得分:1)

我的问题是我的PC上有两条包含相同库的路径。这两条路径都已添加到配置属性 - >中的其他资源库目录中。链接器 - >常规。删除其中一条路径解决了问题。

答案 20 :(得分:0)

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

问题是,在这样的安装之后,来自C:\ Windows \ System32的文件 msvcr100_clr0400.dll 被新文件覆盖,新文件的大小很小,约为19 Kb,但是前一个文件〜800 Kb。

从另一台构建机器手动还原文件后,cvtres.exe再次开始正常工作。

答案 21 :(得分:0)

更新.NET后我遇到了同样的问题: 我首先卸载了.NET框架, 从visualstudio.com下载了视觉工作室并选择"修复"。

使用visual studio自动安装.NET框架 - >现在它工作正常!

答案 22 :(得分:0)

对于那些使用OpenGL SuperBible第6个源代码示例寻找此问题解决方案的人来说,解决方案是在 Release 而不是 Debug 中构建。所有项目都已禁用 Release 版本中的增量链接选项。

答案 23 :(得分:0)

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

我很惊讶我不得不使用无用的.NET框架来使用SDK构建Win32应用程序。

答案 24 :(得分:0)

我通过以下方式解决了这个问题:

  1. 在命令提示符下,键入msconfig并按Enter键。
  2. 点击服务标签。
  3. 寻找"应用体验"并勾选刻度线(即选择此项以启用)。
  4. 单击“确定”。如有必要,请重新启动。
  5. 因此问题将永远存在。随机构建并调试您的C ++项目而不受任何干扰。

答案 25 :(得分:0)

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

相关问题