VS2019编译UE4.27.0源码报LNK1179: duplicate COMDAT '' 如何解决?
Module.UnrealEd.15_of_23.cpp.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT ' '
错误产生原因
- VS2019增量编译缺陷:UnrealEd模块属于UE编辑器核心模块,代码量极大,默认拆分为23个并行编译单元,编译过程中并行生成的obj文件存在重复的弱符号(比如模板实例、内联函数),VS增量编译的符号合并逻辑出错,无法正确去重COMDAT段触发报错。
- 中间文件冲突:如果拉取过UE源码更新、或手动修改过UnrealEd相关源码后没有清理旧的中间文件,新旧obj的符号定义不一致会触发该错误。
- VS版本适配问题:16.10.x及更早的VS2019版本对C17标准的符号合并逻辑存在原生bug,UE4.27默认开启C17编译,编译大模块时极易触发该问题。
- 编译资源不足:长时间编译过程中出现内存溢出、磁盘空间不足的情况,会导致生成的obj文件本身损坏,出现无效COMDAT段。
解决方案
- 单模块重编(最快):无需全量重编,直接删除路径
Engine\Intermediate\Build\Win64\UE4Editor\Development\UnrealEd下的所有obj文件,重新触发编译即可,仅会重编UnrealEd模块,耗时远低于全量编译。 - 关闭增量编译:在UE编译配置文件中将
bUseIncrementalLinking参数设为false,或在VS项目属性的「链接器-常规」选项中关闭增量链接,之后重编UnrealEd模块。 - 升级VS2019版本:将VS2019升级到16.11.x及以上的稳定版本,安装时确保勾选「C++游戏开发」工作负载下的所有Unreal Engine适配组件。
- 全量清理重编:上述方案均无效时,删除
Engine\Intermediate、Engine\Binaries整个文件夹,重新运行GenerateProjectFiles.bat生成VS项目后全量编译,编译前预留至少100G空闲磁盘空间,关闭其他占用内存的程序避免资源不足。
内容的提问来源于stack exchange,提问作者Beck Sam
相关产品推荐
相关产品推荐

