【问题标题】:Fatal error LNK1179: invalid or corrupt file: duplicate COMDAT ' '致命错误 LNK1179:无效或损坏的文件:重复的 COMDAT ''
【发布时间】: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


    【解决方案1】:

    我刚刚与这个重复或损坏的 COMDAT 问题斗争了一段时间,我终于弄清楚了是什么导致了我 - 在不了解您的项目的情况下很难说出它对您来说是什么,但这里是:

    1. 我正在使用 c++ 语言进行构建:C++20、VS2022(但我在 vs2019 中也遇到了同样的情况)

    2. 我正在构建启用了实验性标准模块 - 像这样的花哨的东西:import std.core;

    3. 我有一些旧代码,我只是全部#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},它应该让您选择一个长度(链接名称?)供链接器在确定某些内容重复之前考虑。不过,此选项已被弃用,即使设置为非常高的数字,它也对我没有任何帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 2013-04-28
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多