VC 问题集锦

本文详细描述了使用Visual Studio 2010遇到链接错误 'fatalerror LNK1123' 的问题,解释了问题的背景、原因及解决方案。通过替换无法正常工作的cvtres.exe文件,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

竟然,两次遇到同一个问题,第二次,解决的时候还没意识到我之前就碰到过这个问题,依然是一顿搜索。直到看到答案的时候才发现之前干过这件事情。看来有必要记录一下这些东西了。

LINK : fatal error LNK1123

问题出现的症状:

往往出现在VS刚装好的时候,想编个简单的程序测试一下,在编译链接的时候就出现了这样的错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏  。再简单的程序都还是会出现这样的错误。

问题出现的背景:

就我所遇到的情况,出现问题的IDE是VS2010没带SP1补丁的,一种情况是系统是64位的,另一种情况是系统里面还有其他VS版本,比如2008,2012。

问题出现的原因:

微软的文档对此是这样描述的:

转换到 COFF 期间失败: 文件无效或损坏
该对象或资源未能转换为通用对象文件格式 (COFF)。
输入的文件必须具有 COFF 格式。 如果输入的文件不是 COFF,链接自动将 32 位 OMF 对象转换到 COFF 或运行 CVTRES。EXE 转换资源文件。
若要解决此问题,请检查以下可能的原因:
  1. 文件是否已经损坏?
  2. 是该文件是有效的文件类型吗? 无效类型的一个示例是 16 位 OMF 对象。
  3. 您正在运行的版本早于 Visual C++ Visual C++ 2010 Service Pack 1 (SP1) 吗?
他说的十分笼统,有人尝试过升级为SP1,但是,这个问题依然没有解决。

出问题的原因确实是资源文件转换到COFF格式时,出现了问题。在我这里的问题是,用于转换的程序cvtres.exe(在Microsoft Visual Studio 10.0\vc\bin\cvtres.exe里面的),竟然是一个运行了就会报错被关闭的程序,所以资源一直没有办法转换成COFF文件格式,然后当他要链接的时候,也就报错了(文件格式不对)。

问题的解决方案:

网上流传着一种治标不治本的方法:

将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可。这样做的问题是,一则十分麻烦,每个程序都要这么改。二则当我建立MFC程序的时候,这样的方法就失效了,似乎这样的解决方案只在命令行程序中起作用。这种解决方案能够起作用的原因,我想应该是对于控制台程序,唯一的资源就是那个清单文件(manifest),如果,我们要求不要生成清单或者不嵌入清单,那么也就没有要处理的资源,也就不需要cvtres.exe程序,将其转换成COFF格式,也就不会出错了。而对于,MFC程序,资源远不止清单文件一种,所以这种方法对他是失效的。

还有一种治本的方法(前人经验):

系统里面会有多个版本的cvtres.exe,像我64位的系统里面至少有4个版本的cvtres.exe。

Microsoft Visual Studio 10.0\vc\bin\

C:\Windows\Microsoft.NET\Framework\v4.0.30319

C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7601.17514_none_ba1c770af0b2031b

C:\Windows\winsxs\amd64_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7601.17514_none_726f4033dc35da15

如我之前说过的,第一个版本的cvtres.exe,不知何种原因是无法运行的,所以我用第二个cvtres.exe替换了第一个。(当然,事先要做好备份工作,以便有反悔的机会。)

如果,你装有几个版本的VS,那么就会有更多版本的cvtres.exe。可能需要注意,哪个版本的vs调用了哪个版本的cvtres.exe。再看看他那个版本的cvtres.exe是否能运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值