【问题标题】:main.obj : fatal error LNK1143: invalid or corrupt file: no symbol for COMDAT section 0x6main.obj:致命错误 LNK1143:文件无效或损坏:COMDAT 部分 0x6 没有符号
【发布时间】:2018-11-29 18:04:51
【问题描述】:

我在 Windows 10 机器上,我有 2 个文件,main.cpp 和 cuda.cu(我已经在 Ubuntu 上成功构建了这个项目,我正在尝试让它在 Windows 上构建)。我将它们都编译为 64 位体系结构的目标文件。我目前安装了 MS Visual Studio 2010,但我知道它太旧了。如果您认为这是导致此问题的原因,我可以安装 2015(但我不这么认为)。

当我尝试使用命令链接这两个文件时

nvcc main.obj cuda.obj

我得到这个错误:-

main.obj : fatal error LNK1143: invalid or corrupt file: no symbol for COMDAT section 0x6

我该怎么办?

【问题讨论】:

  • 使用 MSVC 编译,对象格式是特定于工具链的。 LNK1143 来自 MS 链接器,它无法理解其他工具链生成的 obj 文件的格式。 ps 为什么去掉“导致这个错误的是main.obj(我的g++编译的文件(MinGW_w64))。”
  • @RichardCritten 为什么要删除“导致此错误的是 main.obj(我的 g++ (MinGW_w64) 编译的文件)。” ? 我自己什么都不想说。并感谢您的回复。我会尝试并报告。
  • @RichardCritten 一个额外的问题,有没有办法在不使用 MSVC 的情况下做到这一点?有什么办法只从终端做吗?它可以从我的 Ubuntu 中完成吗?如果不是,请解释原因。
  • “请解释原因”“对象格式是特定于工具链的”。可以从 Ubuntu 完成吗?应该在另一个问题中提出。
  • 好吧,你删除了发生什么事的唯一线索。您不能使用 MinGW 编译并期望它与 MSVC 链接。它们具有不兼容的目标文件格式。

标签: c++ cuda g++ nvcc


【解决方案1】:

正如@RichardCritten 所指出的,

文件应该用 MSVC 编译,因为对象格式是 特定于工具链。 LNK1143 来自 MS 链接器,它不能 了解对方生成的obj文件的格式 工具链。

因此,MinGW 的 g++ 创建的目标文件无法通过 MSVC 与 cuda 程序的目标文件链接

【讨论】:

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