【问题标题】:Is LLVM/Clang bootstrapped/compiled by GCC?LLVM/Clang 是否由 GCC 引导/编译?
【发布时间】:2021-07-01 22:03:41
【问题描述】:

有一个术语是compiler bootstrapping,它的基本意思是compiling a new compiler with old compiled compiler。比如连GCC都是先用一小部分GCC和so forth编译的。

所以,问题是,LLVM/Clang 是由另一个编译器(如 GCC)引导/编译,还是从头开始编写,如果,基本上如何?我可以直观地在 LLVM 库中看到一些 GCC 的痕迹,但我找不到关于它的确切信息。

【问题讨论】:

    标签: gcc compiler-construction clang llvm


    【解决方案1】:

    没有。 LLVM 可以使用大量编译器中的任何一种进行编译。当我关心这些事情时,有几十个独立的编译器。 (请记住,只有正确性很重要——您甚至可以使用最慢的编译器进行引导,它会产生最慢的输出并且诊断结果很糟糕。)

    这个传说是有根据的:在许多系统上,LLVM 向 GCC 询问如何调用系统链接器,这可能很麻烦。

    【讨论】:

    • 感谢您的回答,我知道我们可以使用任何编译器编译任何 LLVM 项目,但例如 Clang 没有预定义的编译器吗?当我直接将 Clang 作为一个包(不是克隆和构建库)安装到我的电脑(例如在 linux sudo apt install clang 上)时,它不是已经由另一个编译器(如 gcc)编译,还是我不知道?其实,这就是我想从广义上问的问题。
    • 它是由某事或其他人编译的。它可能是由 clang 编译的,甚至可能是同一个 debian 包的先前版本,或者是从另一个平台交叉编译。这些事情通常涉及几个步骤,并且可能非常棘手。
    • 一个例子:假设你需要为 FumbleOS 使用 clang,而你根本没有编译器。但是您有一台运行 Windows 的笔记本电脑。因此,您在 Windows 上构建 clang(使用 Microsoft 的编译器,或者您下载的 clang)。当您看到它有效时,您将 clang 的 CMakeLists.txt 更改为针对 FumbleOS 而不是 Windows 进行编译,然后再次构建 clang,为在 Windows 上运行的 FumbleOS 生成编译器。接下来,您使用第二个 clang 第三次构建 clang,生成一个 FumbleOS 可执行文件,您可以将其从笔记本电脑传输到目标。棘手,但几乎可以从任何起点开始。
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多