ChatGPT解决这个技术问题 Extra ChatGPT

安装 Visual Studio 2012 Release Preview 后出现错误“链接:致命错误 LNK1123:转换为 COFF 期间失败:文件无效或损坏”

我已经安装了 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 位操作系统上看到过它。

C
Callum Watkins

This MSDN thread 解释了如何解决它。

总结一下:

通过转到项目属性 -> 配置属性 -> 链接器(常规) -> 启用增量链接 -> “否(/INCREMENTAL:NO)”来禁用增量链接

或安装 VS2010 SP1。

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

这会影响适用于 Windows 7 和 .NET 4.0 的 Microsoft Windows SDK 7.1 以及 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,并标记了所有选项——这解决了我们的问题。此外,在此事件之后,我们禁用了自动更新 - 以防万一。
M
Martin Ba

如果禁用增量链接对您不起作用,并且关闭“嵌入清单”也不起作用,则在您的路径中搜索多个版本的 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 解决了这个问题。
M
Michaelangel007

检查 cvtrs.exe 的版本:

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

版本错误:
date:03/18/2010
time:下午 01:16
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

IE

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 来解决。我想是因为我使用的是英特尔,而不是 AMD
m
mloskot

根据 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... 文件夹复制它,解决了问题谢谢!!!!!!!
r
rogerdpack

如果您安装了 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。
P
Peter Mortensen

这是因为 .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,它安装了破坏 Visual Studio 2010 的 .net 4.5。在卸载 .net 4.5 并重新安装 .net 4.0 后,我的 Visual Studio 恢复了生机。
F
FractalSpace

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


R
Richard Peck

如果您使用的是 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 日)并正常工作。
O
Orion Edwards

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

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


P
Peter Mortensen

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

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


这对我有用。我将 Net 4.5 作为重要的 Windows 更新。我刚刚卸载了它,这使得构建以一种新的方式失败。然后我完全修复了 Visual Studio 2010 Express 安装,并解决了这个问题。
P
Peter Mortensen

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


S
Sepideh Abadpour

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


P
Peter Mortensen

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


C
Community

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

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

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

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


H
Hung Pham

总结一下:

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

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


V
Vitality

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


n
nerd

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


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

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

接下来我改变了:

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

它对我有用:)


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

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


V
Vijay Kumar Kanta

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

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


P
Peter Mortensen

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

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

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


您还可以从 services.msc 启用 Applicaton Experienc 服务
这对解决问题有什么作用?
P
Peter Mortensen

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


m
mihai

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


A
Aleksandr Khomenko

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

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


h
hackjutsu

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

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

谢谢!


A
Alexander Samoylov

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

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

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