原来机器上安装了VS2010非常正常,安装VS2012后,出现提示
错误 13 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
出现的具体原因是微软的链接文件的格式变了(让人无语的微软)
微软官方给出的具体解决方法是给VS2010打SP1补丁。
下载地址是:http://www.microsoft.com/en-us/download/details.aspx?id=23691
解决方案2:
是嵌入清单的问题,于是对该工程以及所有依赖工程进行如下操作
右键->工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]
1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
1>CVTRES : fatal error CVT1100: 资源重复。类型: MANIFEST,名称: 1,语言: 0x0409
这个是由于日志文件引起的,可以将
项目->属性->配置属性->清单工具->输入和输出->嵌入清单:原来是“是”,改成“否”。
或者将
项目->属性->配置属性->链接器->清单文件->生成清单:原来是“是”,改成“否”。
总结如下这个效果的处置方法:
1:假设名目是一个静态库,或许说,名目中没有本质的资源文件的时候,将嵌入清单改成“否”是可能处置的。
2:假设名目已有了资源文件,将嵌入清单改成“否”是不行能处置效果的,除非你同时把这些资源文件移除掉。
论断,确保名目中没有资源文件的存在,且把嵌入清单改成“否”可能处置该效果,但这确实也失掉了资源文件的作用,没措施,谁让他是个Bug呢。
解决方案3:
Visual Studio 2012发布一段时间了,使用起来感觉也不错。但是最近写一个小程序却遇到了比较麻烦的事情。
这个程序是使用Visual Studio 2012编写的MFC应用程序,编译后一直在Win7系统中Debug和运行,一切都正常。但是放到XP或2003等系统中运行就会提示“not a valid win32 application”。一开始以为文件损坏了,后来copy几次发现问题依旧。
然后搜索,发现有很多人提到了这个问题,主要是由于VS2012的原因,编译的程序不再支持XP了。不过MS官方也提到将发布一个补丁解决此问题。最初该补丁是包含在Visual Studio 2012 update 1 CTP 3中。搜索这个包发现已经不存在,后来才发现,在26号(也就是1天多之前)的时候已经发布了Visual Studio 2012 update 1的正式版,于是下载安装。
按照官方给出的提示,安装成功之后,打开VS2012,在项目上属性中,应该会存在配置属性-常规-平台工具集中出现“Visual Studio 2012 (v110 XP)”。非常遗憾的是这个Update 1的包是在线安装的,总是有一个包下载不下来,安装几次也无济于事。
无奈之下重新安装了一个Visual Studio 2010,不过将原来的工程再转为2010的工程就太麻烦了。好在这个时候从2012中再看工程的属性时,平台工具集中已经出现“Visual Studio 2010 (v100)”和“Visual Studio 2008 (v90)”了。于是重新生成工程,编译,然后就又出了问题。
这时遇到的问题是“LINK : fatalerrorLNK1123:转换到COFF期间失败: 文件无效或损坏”。继续搜索,发现这个问题也很常见,处理方法也比较一致,就是继续设置工程的属性,配置属性-清单工具-输入和输出-嵌入清单-否。
按照这个方法设置之后发现依旧不好用,可是貌似网上其他人都用此方法解决了问题啊,奇怪。后来突然发现系统右下角出现了Visual Studio 2010 sp1补丁的安装通知。想着可能以后还要用2010,于是拿以前下载好的sp1安装包安装。然后再次尝试,惊喜地发现问题居然解决了,终于编译出了可以在XP和2003中运行的MFC程序。
总结一下,就是安装VS 2010及其SP1,设置属性的嵌入清单为否,平台工具集为2010,重新生成即可。
其实这个也就是临时急着解决问题用的,估计过几天VS2012 update 1的网络安装稳定了,就可以直接使用2012的工具集编译出支持XP和2003的程序了。
解决方案4:
微软的东西就是这样,一旦出了问题,你只能选择重装,甚至是重装系统。我也采用这种笨方案。不过凭感觉可能与以前在D盘安装过vc有关,有可能覆盖安装导致某些文件被破坏。于是先卸载了VC,然后把文件夹D:/program files/Viusaul studios删除掉,以前就是安装的这个目录。然后重启电脑,重新安装了一下。又重新打开小项目,编译,通过了。
解决方案5:
楼主的这些方法我都没用上,我是这样解决的,我是win7的64位系统,把 vc\bin\cvtres.exe 文件改名,就好了,因为系统里还有一个 c:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe 比 vc 安装目录下那个更新 (网友:似无鸡蛋提供)
总结: 这些方法是从网上整理的,经过测试,方法2没起作用,用方案1下载一个sp1包(约600M),安装后,重启,打开VS按照vs的弹出框提示安装其他补丁后,重新编译,问题解决!不过很推荐网友提供的方案5!