我已经安装了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 ,重新启动,问题仍然存在!救命啊!
答案 0 :(得分:650)
This MSDN thread解释了如何修复它。
总结:
通过转到
禁用增量链接Project Properties
-> Configuration Properties
-> Linker (General)
-> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
或安装VS2010 SP1。
Edits(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器。您需要安装VS 2010 SP1 compiler pack才能取回它们。
这会影响适用于Windows 7和.NET 4.0的Microsoft Windows SDK 7.1 以及 Visual Studio 2010 。
答案 1 :(得分:249)
如果禁用增量链接对您不起作用,并且关闭“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而失败。
(真的很烦人,错误信息与实际问题无关,但这对于微软产品来说并不罕见。)
只需删除/重命名旧版本的实用程序,或重新排列PATH变量,以便首先使用适用的版本。
请注意,对于x64工具构建,您可能还需要检查C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
其他cvtres.exe
的位置。
答案 2 :(得分:49)
检查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"
答案 3 :(得分:45)
根据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位版本工具重复相同的步骤。
此解决方案是安装SP1 for VS2010的替代方案 - 在某些情况下,您根本无法安装SP1(即,如果您需要支持SP1之前的版本)。
答案 4 :(得分:35)
如果您已安装Visual Studio 2012 RC,则它安装了.NET 4.5 RC。
卸载.NET 4.5 RC,并安装所需的版本(适用于VS 2010的4.0)。这应该可以解决你遇到的任何问题。
这解决了同样的问题。无需卸载Visual Studio。
答案 5 :(得分:15)
这是因为.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 。
答案 6 :(得分:14)
对我来说,将'Generate Manifest'设置为'No'可以修复它。 (也用/ INCREMENTAL:NO修复)
答案 7 :(得分:13)
如果您使用的是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
答案 8 :(得分:12)
我最终通过完全卸载VS2012 RC,然后完全卸载VS2010,然后从头开始重新安装VS2010来解决这个问题。
花了很长时间,但我现在能够再次在VS2010中编译C ++项目。
答案 9 :(得分:11)
通过删除.NET 4.5并将其替换为 .NET 4.0 ,我可以神奇地解决这个问题。然后,我不得不修复Visual Studio 2010 - 它在某种程度上被破坏了。
我以前安装过,然后卸载了Visual Studio 2012 - 这可能与问题有关。
答案 10 :(得分:10)
我没有安装Visual Studio 2012,但我在Visual Studio 2010中仍然遇到此错误。我在安装Visual Studio 2010 SP1后解决了此问题。
答案 11 :(得分: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
答案 12 :(得分:6)
+1用户an answer的缩写,适用于我!
我尝试使用msbuild /v:diag
对此进行一些调试,我发现MSBuild正在尝试在可执行文件中嵌入清单,其中包含< somename> .dll.embed.manifest链接器命令行上的.res,它是从< somename> .dll.embed.manifest构建的资源文件。但清单文件是一个空的Unicode文本文件。 (即,带有Unicode 0xFEFF前缀的双字节文件)
因此根本问题似乎与未生成的清单文件有关,或者在应该使用< somename> .dll.intermediate.manifest时使用它。
另一种解决方案似乎是关闭“属性”,“清单工具”,“输入和输出”下的“嵌入清单”选项。
答案 13 :(得分:5)
启用增量链接后,它对我无效 - > “不(/ INCREMENTAL:NO)”,但删除rc文件后它对我有用。
答案 14 :(得分:4)
总结:
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 13.0 \ VC \ BIN \的Cvtres.exe
然后,替换为C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ BIN \的Cvtres.exe 和我一起,做3步吧
答案 15 :(得分:4)
截至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.这对我有用。
答案 16 :(得分:2)
即使安装了Service Pack,您也会收到错误,然后尝试删除/重命名C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin文件夹中的cvtres.exe。这对我有用。
答案 17 :(得分:1)
我将启用增量链接设置为“否(/ INCREMENTAL:NO)”,对我不起作用。
接下来我改变了:
Project Properties
-> Configuration Properties
-> General
-> Platform Toolset -> "Visual Studio 2012 (v110)"
它适用于我:)
答案 18 :(得分:1)
我尝试了几次,最后通过卸载VS2010几次解决了这个问题。我想我没有卸载所有文件,这就是为什么它第一次不起作用。
在VS2012的安装中,据说如果您有VS2010 SP1,则无法在两个程序中使用同一个项目。建议只有一个程序。
谢谢!
答案 19 :(得分:1)
我的问题是我的PC上有两条包含相同库的路径。这两条路径都已添加到配置属性 - >中的其他资源库目录中。链接器 - >常规。删除其中一条路径解决了问题。
答案 20 :(得分:0)
在以前具有Visual Studio 2010的计算机上安装Visual Studio 2017和.NET Framework 4.6之后,出现了此问题。
问题是,在这样的安装之后,来自C:\ Windows \ System32的文件 msvcr100_clr0400.dll 被新文件覆盖,新文件的大小很小,约为19 Kb,但是前一个文件〜800 Kb。
从另一台构建机器手动还原文件后,cvtres.exe再次开始正常工作。
答案 21 :(得分:0)
更新.NET后我遇到了同样的问题: 我首先卸载了.NET框架, 从visualstudio.com下载了视觉工作室并选择"修复"。
使用visual studio自动安装.NET框架 - >现在它工作正常!答案 22 :(得分:0)
对于那些使用OpenGL SuperBible第6个源代码示例寻找此问题解决方案的人来说,解决方案是在 Release 而不是 Debug 中构建。所有项目都已禁用 Release 版本中的增量链接选项。
答案 23 :(得分:0)
我使用Windows SDK进行核心Win32编程,并且出于“未知”的原因安装了.NET 4.5。我已经卸载了,安装了4.0就像以前的答案一样,是的,它也适用于我。
我很惊讶我不得不使用无用的.NET框架来使用SDK构建Win32应用程序。
答案 24 :(得分:0)
我通过以下方式解决了这个问题:
因此问题将永远存在。随机构建并调试您的C ++项目而不受任何干扰。
答案 25 :(得分:0)
重新安装CMake为我工作。新的CMake副本发现它应该使用Visual Studio 11而不是10。