【发布时间】:2021-10-12 11:53:57
【问题描述】:
我正在 VS2019 上从源代码构建 Unreal Engine 4.27.0,但显示如下:
Module.UnrealEd.15_of_23.cpp.obj:致命错误 LNK1179:无效或损坏的文件:重复的 COMDAT ''
从源代码构建已经花费了 5 个多小时。
【问题讨论】:
标签: build visual-studio-2019 unreal-engine4
我正在 VS2019 上从源代码构建 Unreal Engine 4.27.0,但显示如下:
Module.UnrealEd.15_of_23.cpp.obj:致命错误 LNK1179:无效或损坏的文件:重复的 COMDAT ''
从源代码构建已经花费了 5 个多小时。
【问题讨论】:
标签: build visual-studio-2019 unreal-engine4
我刚刚与这个重复或损坏的 COMDAT 问题斗争了一段时间,我终于弄清楚了是什么导致了我 - 在不了解您的项目的情况下很难说出它对您来说是什么,但这里是:
我正在使用 c++ 语言进行构建:C++20、VS2022(但我在 vs2019 中也遇到了同样的情况)
我正在构建启用了实验性标准模块 - 像这样的花哨的东西:import std.core;
我有一些旧代码,我只是全部#include,我没有阅读关于这两种导入/包括如何在启用模块的情况下一起使用的具体规则。我有一些看起来像这样的文件(但有不同的类)
// whatever.ixx export module whatever;#include "oldHeaderFullOfTemplates.hpp"import someNewCustomModule;export class stuffWhatever {// ...}
这里的问题是,通过 #include below 导出模块行,我强制编译器将这些东西包含在模块中......有点......并且在我的有限范围内理解,它必须为该标头中的所有内容创建新的、更长的唯一链接名称 * 始终将其包含在任何模块中。无论如何,通过移动我的#include "oldHeaderFullOfTemplates.hpp"
上方我的export module whatever;
我所有愚蠢的 comdat 错误都消失了。
另外-我对c ++ 20模块的理解显然......有限,所以如果我在上面撒谎,也许更多知识渊博的人可以纠正我这里发生的wtf。
最后一个花絮是一个旧的 VS 编译器选项/H{number},它应该让您选择一个长度(链接名称?)供链接器在确定某些内容重复之前考虑。不过,此选项已被弃用,即使设置为非常高的数字,它也对我没有任何帮助。
【讨论】: