在使用 Clang++ 和 LLD 构建时,GCC 的哪一部分仍然涉及?
Which part of GCC is still involved when building with Clang++ and LLD?
我使用 Clang++/LLD 构建了一个非常简单的程序:
clang++ -fuse-ld=lld -o test test.cpp
我比 运行 更愿意确认 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 构建的?只是想知道。
根据how you built libc++,您可能仍在使用 libgcc 和 libsupc++ 来提供一些由 libc++abi 和 libcxxrt 提供的例程(即便如此,可能仍然需要 libgcc 的某些部分来制作一切正常)。
根据平台的不同,可能仍有一些启动文件或链接的 libc 位,其中可能包含也可能不包含对 GCC 的字符串引用。
在 Mac 或 BSD 上,例如,不应再涉及任何 GCC。
Clang driver 也(曾经)使用 GCC 来推断例如库和 header 搜索路径,但我认为它只是作为未知平台的后备。
我使用 Clang++/LLD 构建了一个非常简单的程序:
clang++ -fuse-ld=lld -o test test.cpp
我比 运行 更愿意确认 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 构建的?只是想知道。
根据how you built libc++,您可能仍在使用 libgcc 和 libsupc++ 来提供一些由 libc++abi 和 libcxxrt 提供的例程(即便如此,可能仍然需要 libgcc 的某些部分来制作一切正常)。 根据平台的不同,可能仍有一些启动文件或链接的 libc 位,其中可能包含也可能不包含对 GCC 的字符串引用。
在 Mac 或 BSD 上,例如,不应再涉及任何 GCC。
Clang driver 也(曾经)使用 GCC 来推断例如库和 header 搜索路径,但我认为它只是作为未知平台的后备。