【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工具)

参考网址:


THE END!

posted @ 2018-12-03 19:45  SoaringLee_fighting  阅读(538)  评论(0编辑  收藏  举报