我已经安装了 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,重新启动,但问题仍然存在!帮助!
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。
如果禁用增量链接对您不起作用,并且关闭“嵌入清单”也不起作用,则在您的路径中搜索多个版本的 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
。
检查 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"
根据 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 之前的构建)。
如果您安装了 Visual Studio 2012 RC,那么它安装了 .NET 4.5 RC。
卸载 .NET 4.5 RC,然后安装您需要的版本(VS 2010 为 4.0)。这应该可以解决您遇到的任何问题。
这解决了同样的问题。无需卸载 Visual Studio。
这是因为 .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。
对我来说,将“生成清单”设置为“否”修复了它。 (也用 /INCREMENTAL:NO 修复)
如果您使用的是 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 日)并正常工作。
我最终通过完全卸载 VS2012 RC,然后完全卸载 VS2010,然后从头开始重新安装 VS2010 解决了这个问题。
它花了很长时间,但我现在能够再次在 VS2010 中编译 C++ 项目。
通过删除 .NET 4.5 并将其替换为 .NET 4.0,我神奇地解决了这个问题。然后我不得不修复 Visual Studio 2010 - 它在途中以某种方式损坏。
我以前安装过,然后卸载了 Visual Studio 2012 - 这可能与该问题有关。
我尚未安装 Visual Studio 2012,但在 Visual Studio 2010 中仍然出现此错误。我在安装 Visual Studio 2010 SP1 后解决了此问题。
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
在启用增量链接->“否(/INCREMENTAL:NO)”后它对我不起作用,但在我删除 rc 文件后它对我有用。
+1 给对我有用的用户 an answer 的缩写!
我尝试使用 msbuild /v:diag
对此进行一些调试,我看到 MSBuild 正在尝试在可执行文件中嵌入清单,并在链接器命令行上使用 <somename>.dll.embed.manifest.res ,其中这是从 <somename>.dll.embed.manifest 构建的资源文件。但清单文件是一个空的 Unicode 文本文件。 (即 Unicode 0xFEFF 前缀的两字节文件)
因此,根本问题似乎与未生成该清单文件有关,或者在应该使用
另一种解决方案似乎是关闭属性、清单工具、输入和输出下的“嵌入清单”选项。
总结一下:
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 步即可
截至 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。这对我有用。
即使安装了 Service Pack,您也会收到错误消息,然后尝试删除/重命名 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin 文件夹中的 cvtres.exe。这对我有用。
我将启用增量链接设置为“否 (/INCREMENTAL:NO)”,但它对我不起作用。
接下来我改变了:
Project Properties
-> Configuration Properties
-> General
-> Platform Toolset -> "Visual Studio 2012 (v110)"
它对我有用:)
重新安装 CMake 对我有用。 CMake 的新副本发现它应该使用 Visual Studio 11 而不是 10。
我正在使用 Windows SDK 进行核心 Win32 编程,并且出于“未知”原因安装了 .NET 4.5。我已经卸载了它并像以前的答案一样安装了 4.0,是的,它也对我有用。
只是让我大吃一惊,我不得不使用无用的 .NET 框架来使用 SDK 构建 Win32 应用程序。
我通过执行以下操作解决了这个问题:
在命令提示符下,键入 msconfig 并按 Enter。单击服务选项卡。查找“应用程序体验”并打勾(即选择此选项以启用)。单击确定。并在必要时重新启动。
因此,问题将永远存在。一定要随机构建并调试您的 C++ 项目,而不会受到任何干扰。
对于那些使用 OpenGL SuperBible 6th 源代码示例寻找解决此问题的方法的人,该解决方案是在 Release 中构建而不是在 Debug 中构建。所有项目都禁用了 Release 版本中的增量链接选项。
我的问题是我的 PC 上有两条包含相同库的路径。两个路径都添加到配置属性 -> 链接器 -> 常规中的附加库目录中。删除其中一条路径解决了这个问题。
更新 .NET 后我遇到了同样的问题:我先卸载了 .NET 框架,从 visualstudio.com 下载了 Visual Studio 并选择了“修复”。
NET 框架是使用 Visual Studio 自动安装的 -> 现在可以正常工作了!
我试了几次,终于通过卸载多次VS2010解决了这个问题。我想我没有卸载所有文件,这就是它第一次不起作用的原因。
在VS2012的安装中,据说如果你有VS2010 SP1,你就不能在两个程序中处理同一个项目。建议只有一个程序。
谢谢!
在之前安装了 Visual Studio 2010 的机器上安装了 Visual Studio 2017 和 .NET Framework 4.6 后,我遇到了这个问题。
问题是,在这样的安装之后,来自 C:\Windows\System32 的文件 msvcr100_clr0400.dll 被新文件覆盖,其大小非常小 ~19 Kb,而前一个文件约为 800 Kb。
在我从另一台构建机器手动恢复文件后,cvtres.exe 再次开始正常工作。
不定期副业成功案例分享