VC++项目从VS2015迁移到VS2019报C1047错误如何解决
VC++项目从VS2015迁移到VS2019 C1047错误解决方案
- 排查全项目平台工具集版本:检查解决方案内所有依赖项目(包括静态库、动态库子项目)的
项目属性-常规-平台工具集,确保全部统一为v142(VS2019对应的工具集版本),禁止出现v140(VS2015)、v141(VS2017)混合的情况,注意同时核对Debug/Release、x86/x64所有配置组合的工具集参数,避免单配置漏改。 - 彻底清理旧编译残留:手动删除解决方案根目录下的所有
*.user文件、ipch文件夹,删除每个项目的Debug、Release、x64、x86中间输出目录,再删除VS全局缓存路径%LocalAppData%\Microsoft\MSBuild\v4.0下的临时配置文件,避免旧版本编译产物被误链接。 - 核对运行库参数一致性:检查所有项目
项目属性-C/C++-代码生成-运行库配置,确保同一配置下所有项目的运行库版本完全一致,比如Debug模式下统一为多线程调试DLL(/MDd)或多线程调试(/MTd),Release模式下统一为多线程DLL(/MD)或多线程(/MT),禁止Debug和Release运行库混合、MD和MT参数混合的情况。 - 排查第三方依赖库版本:如果项目引用了外部第三方静态库/动态库,确认这些库是否是用VS2019 v142工具集编译的版本,如果第三方库没有对应版本,可临时在项目属性中开启
项目属性-链接器-常规-使用库依赖输入为否,或者添加兼容链接参数/FORCE:MULTIPLE(该参数仅作为临时兼容方案,可能引发运行时异常,优先替换对应版本的第三方库)。 - 统一LTCG配置:检查所有项目
项目属性-全程序优化-全程序优化配置,确保所有项目的配置统一,要么全部开启使用链接时间代码生成(/LTCG),要么全部关闭,LTCG参数不统一是触发C1047错误的常见隐蔽原因。 - 关闭增量编译全量重编:暂时关闭所有项目的增量编译选项
项目属性-C/C++-代码生成-启用函数级链接、项目属性-链接器-常规-启用增量链接,重新全量生成解决方案,确认错误消失后再按需开启增量编译。
内容的提问来源于stack exchange,提问作者Jayaprakash
相关产品推荐
相关产品推荐

