文档章节

fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏(嵌入清单)

Industryy
 Industryy
发布于 2014/12/24 09:49
字数 949
阅读 113
收藏 1

问题在VS2010中也有,已解决

 

在将一VC6程序转换至VS2005时,出现了错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏;研究发现是由于VS2005生成清单文件的问题。


    VS2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。

    而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该exe文件运行时没有相应的清单文件而运行失败并提示如上错误。   

    解决方案很多,列举如下:

    1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd而非/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,并且也不是我等提倡的解决问题的方式,不推荐。

    2. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不推荐。  

    3. 该方法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规”中的“使用FAT32解决办法”选择“是”(默认为“否”),重新生成项目即可解决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。(此方法是官方解决方法,也比较方便,推荐)   

    4. 既然问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:

    4.1 不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。

    4.2 不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方式使可执行程序产生了更多的外部依赖,不推荐。

   5. 还有一个不能称为方法的土办法:每次Build前手动删除*.ilk文件(增量链接文件)(当然可以在项目属性中写入删除命令,使其自动执行),不推荐。


   最后,总结一下:此问题只在特定条件下才会出现:在FAT32文件系统中编译、默认设置(增量模式、不启用FAT32解决方案、嵌入清单文件)、非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。

   解决方案1,3和4.1方便实用,推荐使用。

本文转载自:http://blog.csdn.net/pjl1119/article/details/8533365

共有 人打赏支持
Industryy
粉丝 2
博文 13
码字总数 7500
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

Industryy
Industryy

引用来自“chchsheng”的评论

不错
chchsheng
chchsheng
不错
LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

用VS2010编译C++项目时出现这样的错误: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 方案一:(这个方法比较好,在用qt运行时出现问题也能解决) 复制 C:Windowswinsxsx86netfx-cvtres...

技术小甜
2017/11/08
0
0
VS2010 C++ MFC

在VS2010中新建了一个基于对话框的MFC应用程序,但在编译的时候出现了如下错如:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏,网上说的解决方案如下: 项目\属性\配置...

无昵称31
2014/08/20
322
3
Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式

本来自己的电脑上装了VS2010,因为开发Cocos2d-x 3.x,所以就在自己的机器上装了一个VS2012。 但是。这不装不要紧,debug一下自己原来的程序,结果出现了“error LNK1123: 转换到 COFF 期间失...

技术mix呢
2017/11/16
0
0
C++调试问题

1、遇到调试程序时出现: 1 LINK : fatal error LNK1123: 转换到 COFF期间失败:文件无效或损坏 解决方法:单击菜单栏中的项目-属性 然后,点击配置属性,清单工具,输入输出,嵌入式菜单,将...

lillian_trip
2017/08/30
0
0
vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 问题说明:当安装VS2012之后,原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时,不会恢复.NET 4.0。 l 当VS2012安装后...

nothingfinal
2018/03/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DevSecOps 运维模式中的安全性

本文想从技术的角度谈谈我对云计算数据中心 DevSecOps 运维模式中的安全性的理解,和过去几年我在云服务业务连续性管理方面的探索。 现在公有云服务商都不约而同地转向 DevSecOps 模式。Dev...

xiangyunyan
18分钟前
3
0
K8s集群部署

环境 系统 角色 IP centos7.4 master-1 10.10.25.149 centos7.4 master-2 10.10.25.112 centos7.4 node-1 10.10.25.150 centos7.4 node-2 10.10.25.151 centos7.4 lb-1 10.10.25.111 centos7......

拜了个拜
21分钟前
1
0
SpringBoot项目如何访问jsp页面

1.添加pom依赖 首先在原来的pom文件基础上加上这两个配置 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:7877071...

编程SHA
50分钟前
3
0
nginx反向代理配置去除前缀

使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:...

架构师springboot
今天
7
0
QianBill API 开发笔记

JWT https://www.jianshu.com/p/6307c89fe3fa

BeanHo
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部