【问题标题】:Windows/clang linker undefined symbol mainCRTStartupWindows/clang 链接器未定义符号 mainCRTStartup
【发布时间】:2022-12-12 02:01:57
【问题描述】:

我使用 Clang 编译,需要将不同的 .obj 文件捆绑到一个 .lib 中。这个 .lib 然后被编译成可执行文件。问题是,尽管它适用于 Unix(ld.lld -r 文件...-o file.lib),但我不能将 -r 用于 lld-link,并且使用 /lib 选项会导致错误:

lld-link: error: <root>: undefined symbol: mainCRTStartup

我尝试了相同的过程,但使用的是 unix。在这里,我们有 ELF 对象文件,可以执行 -relocatable(-r) 将 ELF 对象合并为一个。在 Windows 上,COFF 没有 -relocatable 选项,afaik。而 /LIB 实际上产生了一个包,而不是一个 COFF 对象。如果我不使用 /LIB 作为包含 main 的 COFF 文件,则可执行文件会编译。

【问题讨论】:

    标签: windows compilation linker clang


    【解决方案1】:

    不确定是否可以将 COFF 或 MACH-O 对象文件合并为一个,但我用 mainCRTStartup 解决了我的问题。

    我的 Final.lib 文件实际上是我代码中所有内容的混合体,它由我所有项目中的各个 .obj 文件组装而成。

    我使用 ld(insert correct driver) -r(/lib) file1.obj file2.obj... -o(/out:)Final.lib 编译它

    而现在最宝贵的时刻!现在我们必须使用 Clang 编译这个 .lib

    clang++ -fuse-ld=lld Final.lib -o App.a(exe)
    

    这是唯一的事情,实际上解决了我的问题。我不知道,为什么将 LLD 用作 LD 可以解决所有问题,但只能忍受它,好吗?

    祝你好运,朋友们!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多