首页 文章

安装Visual Studio 2012 Release Preview后出现错误'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt'

提问于
浏览
521

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

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

我不是100%肯定这一点,但它似乎与其中包含 .rc (资源)文件的项目有关 .

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

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

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

26 回答

  • 1

    更新.NET后我遇到了同样的问题:我首先卸载了.NET框架,从visualstudio.com下载了visual studio并选择了"repair" .

    NET框架是随视觉工作室自动安装 - >现在它工作正常!

  • 246

    我将 Enable Incremental Linking 设置为 "No (/INCREMENTAL:NO)" 并且它对我不起作用 .

    接下来我改变了:

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

    它对我有用:)

  • 4

    1到用户的缩写an answer对我有用!

    我尝试使用 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”选项 .

  • 0

    总结一下:

    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复制文件之一:

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

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

    • 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步吧

  • 12

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

  • 6

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

    我惊讶地发现,我不得不使用无用的.NET框架来使用SDK构建Win32应用程序 .

  • 0

    检查 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"
    
  • 13

    这是因为.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 .

  • 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

  • 49

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

    • 在命令提示符下,键入msconfig并按Enter键 .

    • 单击服务选项卡 .

    • 寻找"Application Experience"并勾选刻度线(即选择此项以启用) .

    • 单击“确定” . 如有必要,重新启动 .

    因此问题将永远存在 . 随机构建并调试您的C项目,不受任何干扰 .

  • 45

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

  • 2

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

    根据MSDN论坛中的这个帖子:VS2012 RC installation breaks VS2010 C++ projects,简单地说,从 VS2010 SP1cvtres.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 (一个 without 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之前的版本) .

  • 35

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

    总结一下:

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

    编辑(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器 . 你需要安装VS 2010 SP1 compiler pack来取回它们 .

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

  • 1

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

  • 644

    我的问题是我的PC上有两条包含相同库的路径 . 两条路径都添加到 Configuration Properties -> Linker -> General 中的 Additional Library Directories . 删除其中一条路径解决了问题 .

  • 0

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

  • 0

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

  • 4

    我在以前使用Visual Studio 2010的计算机上安装Visual Studio 2017和.NET Framework 4.6后出现此问题 .

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

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

  • 15

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

  • 11

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

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

    谢谢!

  • 10

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

  • 5

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

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

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

  • 0

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

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

  • 0

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

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

  • 1

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

相关问题