安装Visual Studio 2012发行预览版后出现错误“ LINK:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏”


535

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

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

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

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

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

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


这是x86问题,x64问题还是两者?我在32位操作系统上看到它。我不记得在64位操作系统上看到过它。
jww

Answers:


652

此MSDN线程说明了如何修复它。

总结一下:

  • 您可以通过以下方法禁用增量链接

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

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

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


1
安装.Net 4.5之后,我很快就遇到了这个问题。安装VS2010 SP 1可以解决此问题。我在任何时候都没有安装VS 2012。
KJAWolf

2
要禁用与CMakefile的增量链接,请执行以下操作:cmake.org/pipermail/cmake/2010-February/035174.html
Map X

2
在Visual Studio下的Qt中,添加到您的.pro:QMAKE_LFLAGS + = / INCREMENTAL:NO对我
有用

5
@grundic之类的。我们从Win 7 SDK重命名了cvtres.exe,以便link.exe找不到它,而是使用.NET 4.5中的新文件。Windows 8 SDK不再包含命令行工具。现在,您必须至少安装Visual Studio 2012 Express for Desktops才能获取桌面应用程序命令行工具。重命名解决方案被认为是破坏性最小的,并且可以很容易地编写脚本。
DuckPuppy 2014年

2
@DuckPuppy幸运的是,我们通过从构建代理中完全删除Microsoft .Net 4.5.1并重新安装.Net 4.0解决了此问题。之后,我们运行了带有所有标记的选项的Microsoft SDK 7.0重新安装-这解决了我们的问题。另外,在此事件之后,我们禁用了自动更新-以防万一。
grundic

249

如果禁用增量链接对您不起作用,并且关闭“嵌入清单”也不起作用,那么请在路径中搜索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。

(确实让错误消息与实际问题无关,但这对于Microsoft产品而言并不罕见。)

只需删除/重命名该实用工具的较旧版本,或重新排列PATH变量,以使工作的版本优先出现。

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


3
为我工作。感谢您提供有关/ VERBOSE的技巧,该技巧显示了如何/为什么而不是仅仅做什么魔术。
M Katz 2014年

1
只需在Visual Studio目录中的旧文件上复制Framework目录中的新文件即可。
Yochai Timmer 2014年

这也解决了我的问题。我正在使用具有严格UAC的计算机,因此我能够从命令行确认哪个cvtres.exe首先起作用。首先运行cvtres.exe。然后“ C:\ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine:amd64 / verbose / out:”详细输出中的名称“ / readonly FileFromVerboutput.res。一个路径显示错误,.NET一个工作
。– user176692

50

检查以下版本cvtrs.exe

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

错版:
date:2010年3月18日
time:下午1时十六分
size:31048个字节
name:的Cvtres.exe

正确的版本:
date:2011年2月21日
time:下午6时03分
size:31056个字节
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"

这可能会对其他有类似问题的人有所帮助。我正在使用ms build,必须复制以下文件:msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe从C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE到C:\ Program Files( x86)\ Microsoft Visual Studio 11.0 \ VC \ bin除此之外,根据i-am-bryan.com/webs/tutorials/…–
Kell

这对我有用,但是我的“正确” cvtres.exe文件的大小,日期等不同(尽管仍然来自VS 2012 bin)
aampere

对我来说,可以通过从.... Studio 10.0 \ VC \ bin \ amd64 \重命名cvtres来解决。我认为是因为我使用的是Intel,而不是AMD
DanielHári16年

46

根据MSDN论坛中的此主题:VS2012 RC安装打破了VS2010 C ++项目,简单来说,cvtres.exe取自VS2010 SP1

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

并将其复制cvtres.exeVS2010 RTM安装中(不带SP1的安装)

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

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

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

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


1
那对我有用。由于我使用的是Win7 64位,因此我首先从... Framework64 \ v4.3 ...文件夹复制了cvtres.exe,但这并不能解决问题。然后从Framework \ v4.3 ...文件夹复制它,就解决了问题,谢谢!!!!
猎鹰'16

36

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

卸载.NET 4.5 RC,然后安装所需的版本(VS 2010为4.0)。这样可以清除您遇到的所有问题。

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


4
大!!我只用.NET 4.0替换了.NET 4.5。而且效果很好!
manutd 2012年

1
更新:卸载.net 4.5和4.0确实为我修复了该问题(VS 2010 Express)。但是Windows Update似乎会不断升级回.net 4.5.1,因此我必须经常重复进行此操作。但是,安装“ VS 2010 SP1”和voila后,VS 2010 Express现在也可以使用,仍然安装了.Net 4.5.1。
rogerdpack

15

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

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


3
Confit !!!!!!!!! 仅重新安装VC2010并没有帮助。删除framework4.5 RC后就可以了。
inkooboo 2012年

我安装了umdh,该软件安装了.net 4.5,这打破了Visual Studio2010。在卸载.net 4.5并重新安装.net 4.0之后,我的Visual Studio复活了。
stu 2014年

14

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


14

如果您使用的是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

1
注意:这既有效,因为.NET Framework 4 Multi-targeting pack .NET Framework 4.5.2都已安装。该文件C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe属于.NET Framework 4 Multi-targeting pack。如果您已经安装Windows SDK 7.1,然后又将.NET更新到4.5.2,通常就是这种情况。在这种情况下,您通常可以简单地重命名C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe为,cvtres-old.exe并且将使用较新的版本cvtres.exe(8/30/17)。
David C. Rankin

13

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

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


11

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

我之前安装了Visual Studio 2012,然后又将其卸载,这可能与该问题有关。


2
这对我有用。我把Net 4.5当作重要的Windows Update。我只是卸载了它,这使构建以一种新的方式失败了。然后,我完全修复了Visual Studio 2010 Express安装,从而解决了该问题。
海德2014年

10

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


9

我在Microsoft Visual Studio 2010 Ultimate中遇到了相同的问题,此youtube视频中描述的方法解决了该问题

视频说明重命名文件的Cvtres.exeC:\ Program Files文件(x86)的\微软的Visual Studio 10.0 \ VC \ BIN (in my Win7X64 matchine)CVTRES,old.exe


6

向用户+1了对我有用的答案的缩写!

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

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

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


6

在启用增量链接->“否(/ INCREMENTAL:NO)”之后,它对我不起作用,但是在删除rc文件后,它对我却不起作用。


5

总结一下:

Step1

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

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

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

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

  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步即可工作


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。


3

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


它为我工作。但是我不知道这是怎么一个问题。如果您能告诉我,将不胜感激。谢谢。
DTdev 2015年

2
在下面的答案中,@ Rich Peck解释了此行为的原因。
2015年

1

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

接下来,我进行了更改:

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

它对我有用:)


如果您需要创建在WinXP平台上可调试的可执行文件,则此方法将无效。
杰伊·埃尔斯顿

抱歉,但这不是解决方案
。.您

1

重新安装CMake对我有用。CMake的新副本指出应使用Visual Studio 11而不是10。


1

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

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


1

我通过执行以下操作解决了这个问题:

  1. 在命令提示符下,键入msconfig,然后按Enter。
  2. 单击服务选项卡。
  3. 查找“应用程序体验”,然后打勾(即选择此项以启用)。
  4. 单击确定。并在必要时重新启动。

因此问题将永远存在。不要随意构建并调试C ++项目,而不会产生任何干扰。


您还可以通过services.msc启用Applicaton Experienc服务
App Work

2
这对解决问题有什么作用?
mabraham

1

对于那些正在寻求使用OpenGL SuperBible 6th源代码示例解决此问题的人,该解决方案是在Release中而不是Debug中构建的。所有项目均已禁用发行版中的增量链接选项。


1

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



1

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

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

谢谢!


1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.