gpt4 book ai didi

clang - LLVM:中间字节码与二进制码

转载 作者:行者123 更新时间:2023-12-02 04:21:15 42 4
gpt4 key购买 nike

我对 LLVM 的一个方面感到困惑:

对于它支持的所有语言,它是否支持编译为中间代码和直接二进制文件?

例如,如果我用 C 语言编写一些东西,LLVM(或 Clang?)可以编译为二进制(如 GCC)或中间代码吗?

或者只能将某些语言转换为中间语言?我想不言而喻,这个中间体需要某种类型的 LLVM 运行时?不过,我从未真正听说过运行时。

最佳答案

LLVM 是一个用于操作 LLVM IR(您提到的“字节码”)并将其降低为特定于目标的二进制文件(例如 x86 机器代码)的框架。 Clang 是 C/C++(和 Objective C)的前端,它将这些源语言转换为 LLVM IR。

考虑到这一点,回答您的问题:

For all the languages it supports, does it support compiling both to the intermediate code AND to straight binary?

LLVM 可以将 IR(中间代码)编译为二进制(或汇编文本)。

For instance, if I write something in C, can LLVM (or Clang?) compile to either binary (like GCC) or intermediate code?

是的。 Clang 可以直接将您的代码编译为二进制文件(使用 LLVM 作为后端),或者如果您需要,可以直接发出 LLVM IR。

Or can only some languages be converted to intermediate? I guess it goes without saying that this intermediate requires some type of LLVM runtime?

理论上,一旦有了 LLVM IR,LLVM 库就可以将其转换为二进制文件。某些语言需要运行时(例如 Java 或 Python),因此从这些语言到 LLVM IR 的任何编译器都必须以某种方式提供运行时。 LLVM 对连接到此类运行时提供了一些支持(例如 - GC Hook ),但不提供“自己的运行时”。与 LLVM 相关的唯一“运行时”项目是compiler-rt,它提供了一些语言/编译器内置函数和内在函数的快速实现。它主要用于 C/C++/Objective C。它不是 LLVM 的正式一部分,尽管基于 Clang 的完整工具链经常使用它。

关于clang - LLVM:中间字节码与二进制码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280292/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com