【Link】LNK 1123: 转换到 COFF 期间失败: 文件无效或损坏
DATE: 2018.12.3
本人在编译过程中也遇到了 如下问题:
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
参考自:https://blog.csdn.net/zengraoli/article/details/39081901
https://bbs.csdn.net/topics/390121452
现在罗列一下这几种解决方案:
方案1:
点击“项目”–>“属性”–> “清单工具”,
然后选择"输入和输出’–> ‘嵌入清单’,将后面的‘是’改成‘否’就可以了
方案2:
在VS安装目录搜索cvtres.exe
发现有两个cvtres.exe文件,有的网友选择用最新的文件覆盖掉所有旧的cvtres.exe,也有网友是删除旧cvtres.exe的文件。我是将旧cvtres.exe 改名字了,以备恢复环境。注意这两个文件都是一个版本号,但是生成时间只是相差1个小时,选择最新的那个。也有搜索到好多cvtres.exe的 情况,这个就不清楚了,试试如何删除这些文件吧。我的两个文件目录如下:
D:\ProgramFiles (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
D:\Program Files (x86)\Microsoft VisualStudio 10.0\VC\bin
更新(2018.12.11)
今天在MinGW环境下编译Windows平台解码库时,再次遇到了这个链接错误,尝试了上面两种方案,仍未解决。现在分析一下这个问题并给出更多解决方案。
问题分析:
链接器LNK是通过调用cvtres.exe工具完成资源文件向COFF格式目标文件转换的,所以出现这种错误的原因很有可能就是cvtres.exe出现了问题。
根本原因是cvtres版本与vs链接器版本不匹配造成的。
方案3:
前面的解决方案是不进行清单资源文件的编译 (实际上是规避不使用cvtres.exe工具)或者使用电脑中搜索到的最新的cvtres工具 。
这两种方案都不起作用的情况下,可以尝试第三种方案,直接删除或重命名VC路径下两个路径下面的cvtres.exe工具,此时在vs2010中编译资源文件(由.res文件生成COFF文件)时,会采用以下路径(.NET)的cvtres.exe。
C:\Windows\Microsoft.NET\FrameWork\v4.0..30319\cvtres.exe
关于该问题的详细分析可参考:https://stackoverflow.com/questions/10888391/error-link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-inval/14144713#14144713
https://social.msdn.microsoft.com/Forums/vstudio/en-US/d10adba0-e082-494a-bb16-2bfc039faa80/vs2012-rc-installation-breaks-vs2010-c-projects?forum=vssetup
问题解决!
导致该问题出现的可能情况:
- 在更新VS2010后,或者卸载VS2012安装2010后
- 更新.NET软件导致(.NET软件中也含有cvtres.exe工具)
参考网址:
- https://jingyan.baidu.com/article/3f16e0030e9c422591c10327.html
- https://www.cnblogs.com/newpanderking/articles/3372969.html
- https://yq.aliyun.com/ziliao/348421