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

Ori*_*rds 533 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,重新启动,问题仍然存在!救命!

Sho*_*ort 653

此MSDN线程解释了如何解决它.

总结一下:

  • 通过转到,禁用增量链接

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
    Run Code Online (Sandbox Code Playgroud)
  • 或安装VS2010 SP1.

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

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

  • @grundic排序.我们从Win 7 sdk重命名cvtres.exe,以便link.exe找不到它,而是使用.NET 4.5中的新版本.Windows 8 SDK不再包含命令行工具.您现在必须至少安装Visual Studio 2012 Express for Desktops才能获得桌面应用程序命令行工具.重命名解决方案被认为是破坏性最小的,并且可以轻松编写脚本. (5认同)
  • 要禁用与CMakefile的增量链接:http://www.cmake.org/pipermail/cmake/2010-February/035174.html (2认同)
  • 在Visual Studio中的Qt中添加到.pro:QMAKE_LFLAGS + =/INCREMENTAL:NO为我工作 (2认同)
  • @DuckPuppy幸运的是,我们通过从我们的构建代理和全新安装.Net 4.0中完全删除Microsoft .Net 4.5.1来解决了这个问题.之后我们重新安装了Microsoft SDK 7.0并标记了所有选项 - 这解决了我们的问题.此外,在此事件发生后,我们禁用了自动更新 - 以防万一. (2认同)

Die*_*nte 250

如果禁用增量链接对您不起作用,并且关闭"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而失败.

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

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

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

  • 为我工作.感谢您提供关于/ VERBOSE的提示,其中显示了如何/为什么而不仅仅是做什么神奇的事情. (3认同)

Sid*_*Sid 50

检查版本cvtrs.exe:

dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"
Run Code Online (Sandbox Code Playgroud)

错版:
date:2010年3月18日
time:下午1时16分
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
Run Code Online (Sandbox Code Playgroud)

并替换这里的那个:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)


mlo*_*kot 46

根据MSDN论坛中的这个帖子:VS2012 RC安装打破VS2010 C++项目,简单来说,cvtres.exe取自VS2010 SP1

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
Run Code Online (Sandbox Code Playgroud)

或者来自VS2012

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe
Run Code Online (Sandbox Code Playgroud)

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

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
Run Code Online (Sandbox Code Playgroud)

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

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

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


B_D*_*b42 36

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

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

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

  • 大!!我只用.NET 4.0取代了.NET 4.5.它工作正常!! (4认同)

Alo*_*uel 15

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

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

  • 把它弄糊涂!!!!!!! 只是重新安装VC2010没有帮助.删除framework4.5 RC后就可以了. (3认同)

Fra*_*ace 14

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


Ori*_*rds 13

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

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


Ric*_*eck 13

如果你使用的是x64,这里的资源会有所帮助:

发生这种情况是因为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
Run Code Online (Sandbox Code Playgroud)


Cat*_*lar 11

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

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

  • 这对我有用.我将Net 4.5作为重要的Windows Update.我刚刚卸载它,这使得构建以新的方式失败.然后我完全修复了*Visual Studio 2010 Express*安装,并解决了这个问题. (2认同)

Saj*_*aji 10

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


Sep*_*our 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


Die*_*nte 6

+1给用户简短的回答对我有用!

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

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

另一种解决方案似乎是关闭Properties,Manifest Tool,Input和Output下的"Embed Manifest"选项.


小智 6

在启用增量链接 - >"否(/ INCREMENTAL:NO)"后它对我不起作用,但在删除rc文件后它对我有效.


小智 5

总结一下:

Step1

Project Properties 
   -> Configuration Properties 
       -> Linker (General) 
          -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
Run Code Online (Sandbox Code Playgroud)

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

Project Properties 
   -> Configuration Properties 
       -> Manifest Tool (Input and Output) 
          -> Enable Incremental Linking -> "No"
Run Code Online (Sandbox Code Playgroud)

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