【问题标题】:Which part of GCC is still involved when building with Clang++ and LLD?使用 Clang++ 和 LLD 构建时仍涉及 GCC 的哪个部分?
【发布时间】:2021-01-28 13:46:41
【问题描述】:

我使用 Clang++/LLD 构建了一个非常简单的程序:

clang++ -fuse-ld=lld -o test test.cpp

我跑了 readelf 来确认 LLD 确实被用作链接器,正如 https://releases.llvm.org/11.0.0/tools/lld/docs/index.html 中提到的那样:

$ readelf --string-dump .comment test

String dump of section '.comment':
  [     0]  Linker: LLD 7.0.1
  [    12]  clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final)
  [    49]  GCC: (Debian 8.3.0-6) 8.3.0

很好,使用的链接器确实是 LDD。但这让我想知道为什么那里仍然提到 GCC。也许是因为标准库(大概)是用 GCC 构建的?只是想知道。

【问题讨论】:

    标签: c++ gcc build clang++ lld


    【解决方案1】:

    根据how you built libc++,您可能仍在使用 libgcc 和 libsupc++ 来提供一些由 libc++abi 和 libcxxrt 提供的例程(即便如此,可能仍然需要 libgcc 的某些部分才能使一切正常工作)。 根据平台的不同,可能仍有一些启动文件或链接的 libc 位可能包含也可能不包含对 GCC 的字符串引用。

    在 Mac 或 BSD 上,例如,不应再涉及 GCC。

    Clang 驱动程序也(过去)使用 GCC 来推断例如库和标题搜索路径,但我认为它只是作为未知平台的后备。

    【讨论】:

    • 平台是 Debian 10 (buster),运行时使用 GCC 构建。所以这证实了我的想法。谢谢!
    • 如果 libstdc++ 可用,我相信 clang++ 默认是这样的,你必须明确告诉它使用 libc++。 -stdlib=libc++.
    猜你喜欢
    • 2021-11-14
    • 2021-04-02
    • 1970-01-01
    • 2015-07-02
    • 2016-08-27
    • 2022-06-11
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多