11

我很确定 glibc 是 gcc 的标准 C 库实现的名称。

但对于 LLVM/Clang 我不确定。我已经用谷歌搜索了它是否带有自己的整个标准 C 库的实现,或者他们是否也使用 glibc。令人惊讶的是,我能找到的只是最近一篇讨论Google 正在考虑为 LLVM 编写新的 libc 的文章。但不是那会取代什么。

即使在 LLVM/Clang 源代码库中,我也很有可能只是盲目或愚蠢,但我似乎找不到它。

为了清楚起见,我只对 C 标准库感兴趣,而不是 C++ 标准库。我对研究他们printf对函数系列的实现特别感兴趣。

有人可以告诉我在哪里可以找到 Clang 的 libc/标准 C 库实现或其源代码库吗?

4

4 回答 4

9

Clang 没有自带 C 标准库。相反,它“支持多种 C 标准库实现”

包括 Mac OS 在内的类 Unix 系统自带。Windows 没有。在 Windows 上,默认安排需要安装 Microsoft 的 Visual C 库。不过,似乎也可以在 Windows 上将 Clang 与 MinGW 的库一起使用。

于 2019-11-24T18:37:23.380 回答
7

但对于 LLVM/Clang 我不确定

目前尚不清楚您是在询问哪个 libcclang本身正在使用(如clang编译器二进制文件),还是您是否在询问由于编译和链接而生成二进制文件正在使用哪个 libc。clang

无论哪种情况,答案都是:您告诉它使用哪个 libc(在 clang 配置时,或在链接最终二进制文件时)。

它可以是 GLIBC、uClibc、Musl、Apple libc 或其他一些 libc。

最终,LLVM-libc 可能已经准备就绪,也可以使用了。

更新:

您是说每次安装 Clang 时用户都必须决定使用 libc 吗?

否:提供了合适的默认值——系统 libc,在 Linux 上通常是 GLIBC(但不总是),在 MacOS 上是 Apple libc。

我已经 10 多年没有接触过 Windows,但我怀疑MSVCRT.DLL最终会默认使用 Windows。

但是最终用户可以通过在编译和链接时使用合适的-I...和标志来覆盖默认选择。-L...

最终用户还可以通过重新配置和重建来更改默认值clang

于 2019-11-24T17:32:22.323 回答
7

编译 C++ 代码时,来自 GNU 的 libstdc++ 或 LLVMlibc++可用作 C++ 标准库。它们分别通过clang++使用 flag-stdlib=libstdc++或编译来设置-stdlib=libc++这些信息在https://clang.llvm.org/docs/Toolchain.html中得到了很好的展示。

编译 C 代码时,不能在每次编译时切换 C 标准库。有必要为选定的 C 库构建整个编译器工具链。这意味着交叉编译,或者在 Linux 的情况下,在使用所选 C 库的发行版中进行编译。如果我想用 musl 编译,我会在 Alpine Linux 中编译,等等。

于 2020-05-12T08:27:55.543 回答
1

事情正在发生变化!- LLVM 正在开发自己的 libc 实现 https://github.com/llvm/llvm-project/tree/main/libc

他们没有在几个版本中谈论它:https ://releases.llvm.org/12.0.0/docs/Proposals/LLVMLibC.html

llvm-libc,[是] 针对 C17 及更高版本的 C 标准库的实现,作为 LLVM 项目的一部分。llvm-libc 还将提供相关的平台特定扩展。例如,在 Linux 上它还提供 pthreads、librt 和其他 POSIX 扩展库。

我觉得最有趣的部分是:

  • 从一开始就设计和开发使用 LLVM 工具和测试,如模糊测试和消毒剂支持的测试。

  • 尽可能使用基于源代码的实现而不是汇编。将尝试修复编译器而不是使用汇编语言解决方法。

看起来 LLVM 14 或 15 将与它一起发布。观看此空间以获取更多文档!

于 2022-03-03T18:18:13.520 回答