【问题标题】:Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt' after installing Visual Studio 2012 Release Preview安装 Visual Studio 2012 Release Preview 后出现错误“链接:致命错误 LNK1123:转换为 COFF 期间失败:文件无效或损坏”
【发布时间】:2012-06-08 22:40:02
【问题描述】:

我已经安装了 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,重新启动,但问题仍然存在!救命!

【问题讨论】:

  • 这是 x86 问题、x64 问题还是两者兼而有之?我在 32 位操作系统上看到它。我不记得在 64 位操作系统上看到过它。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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 和 .NET 4.0 以及 Visual Studio 2010

    【讨论】:

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

    我尝试了几次,最终通过多次卸载VS2010解决了这个问题。我想我没有卸载所有文件,这就是它第一次不起作用的原因。

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

    谢谢!

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 确认!!!!!!!只是重新安装 VC2010 没有帮助。删除framework4.5 RC后就OK了。
      • 我安装了 umdh,它安装了 .net 4.5,它破坏了 Visual Studio 2010。卸载 .net 4.5 并重新安装 .net 4.0 后,我的 Visual Studio 恢复了活力。
      【解决方案5】:

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

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

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

      【讨论】:

      • 太棒了!我只用 .NET 4.0 替换了 .NET 4.5。它工作正常!
      • 更新:卸载 .net 4.5 和 4.0 确实为我修复了它(VS 2010 express)。然而,Windows 更新似乎不断升级回 .net 4.5.1,所以我不得不经常重复这一点。但是,安装“VS 2010 SP1”,瞧,VS 2010 express 现在也可以工作了,仍然安装了 .Net 4.5.1。
      【解决方案6】:

      对我来说,将“生成清单”设置为“否”修复了它。 (也用 /INCREMENTAL:NO 修复)

      【讨论】:

        【解决方案7】:

        +1 给用户 an answer 的缩写,对我有用!

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

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

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

        【讨论】:

          【解决方案8】:

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

          接下来我改变了:

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

          它对我有用:)

          【讨论】:

          • 如果您需要创建可在 WinXP 平台上调试的可执行文件,这将不起作用。
          • 抱歉,这不是解决方案。您正在更改工具集,这是一个完全不同的编译器
          【解决方案9】:

          通过删除 .NET 4.5 并用 .NET 4.0 替换它,我神奇地解决了这个问题。然后我不得不修复 Visual Studio 2010 - 它在途中以某种方式损坏。

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

          【讨论】:

          • 这对我有用。我将 Net 4.5 作为重要的 Windows 更新。我刚刚卸载了它,这使得构建以一种新的方式失败。然后我完全修复了 Visual Studio 2010 Express 安装,从而解决了问题。
          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            如果禁用增量链接对您不起作用,并且关闭“嵌入清单”也不起作用,则在您的路径中搜索多个版本的 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 的提示,该提示显示了如何/为什么,而不是仅仅说明要做什么神奇的事情。
            • 只需将 Framework 目录中的新文件复制到 Visual Studio 目录中的旧文件上即可。
            • 这也解决了我的问题。我正在使用具有严格 UAC 的计算机工作,因此我能够从命令行确认哪个 cvtres.exe 首先工作。首先运行cvtres.exe。然后 "C:\windows\Microsoft.NET\Framework\v4.0.30319.cvtres.exe /machine:amd64 /verbose /out:"Name from verbose output" /readonly FileFromVerboutput.res 。一个路径显示错误,.NET一个工作。
            • 在我的情况下,没有安装 VS2012,但是安装了 .Net 4.0 和 .Net 4.6,并且错误出现在 VS2010 中。重命名 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe 解决了这个问题。
            【解决方案12】:

            根据 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 位版本重复相同的步骤。

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

            【讨论】:

            • 这对我有用。由于我使用的是 64 位 win7,我首先从 ...Framework64\v4.3... 文件夹中复制了 cvtres.exe,但这并没有解决问题。然后从 Framework\v4.3... 文件夹复制它,这解决了问题谢谢!!!!!
            【解决方案13】:

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

            【讨论】:

              【解决方案14】:

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

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

              因此问题将永远存在。一定要随机构建和调试您的 C++ 项目,不要受到任何干扰。

              【讨论】:

              • 您也可以从 services.msc 启用 Applicaton Experienc 服务
              • 这对解决问题有什么作用?
              【解决方案15】:

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

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

              【讨论】:

                【解决方案16】:

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

                【讨论】:

                  【解决方案17】:

                  查看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"
                  

                  【讨论】:

                  • 这可能会帮助其他一些有类似问题的人。我正在使用 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/…
                  • 这对我有用,但我的“正确” cvtres.exe 文件的大小、日期等不同(但仍来自 VS 2012 bin)
                  • 对我来说,通过从 ....Studio 10.0\VC\bin\amd64\ 目录重命名 cvtres 来解决。我想是因为我使用的是 intel,而不是 amd
                  【解决方案18】:

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

                  【讨论】:

                    【解决方案19】:

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

                    【讨论】:

                      【解决方案20】:

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

                      【讨论】:

                        【解决方案21】:

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

                        【讨论】:

                        • 它对我有用。但我不明白这是怎么回事。如果您能告诉我,将不胜感激。谢谢。
                        • 在下面的回答中,@Rich Peck 解释了这种行为的原因。
                        【解决方案22】:

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

                        发生这种情况是因为 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
                        

                        【讨论】:

                        • 注意: 之所以有效,是因为 .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(日期为 2017 年 8 月 30 日)并正常工作。
                        【解决方案23】:

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

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

                        【讨论】:

                          【解决方案24】:

                          总结一下:

                          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步就行了

                          【讨论】:

                            【解决方案25】:

                            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

                            【讨论】:

                              【解决方案26】:

                              我在之前安装了 Visual Studio 2010 的机器上安装了 Visual Studio 2017 和 .NET Framework 4.6 后遇到了这个问题。

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

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

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2019-11-11
                                • 1970-01-01
                                • 1970-01-01
                                • 2013-12-30
                                • 1970-01-01
                                相关资源
                                最近更新 更多