7

我对使用 LLVM 的 Clang 编译器很感兴趣。LLVM 声称是跨平台的,但尚不清楚可以针对哪些平台。我在这方面做了很多谷歌搜索,但似乎没有太多关于 LLVM 支持的平台的信息。我唯一发现的是“这个”,这有点令人困惑。我不确定这是否意味着我可以使用 LLVM 为这些平台编译二进制文件,或者它是否只在这些平台(或两者)上运行。对 LLVM/Clang 编译器有更多了解的人能否告诉我可以使用 Clang 或任何其他 LLVM 前端定位哪些平台?我想要具体信息(比如“它支持 Windows 32bit、Windows 64bit、Linux 32bit、Linux 64bit 等)。谢谢!

编辑:

好的,我想我只是对 LLVM 到底是什么感到困惑。从我刚刚发现 LLVM 只是一个字节码解释器。由于 LLVM 被解释为与可执行二进制文件相比,LLVM 二进制文件慢了多少?那么如果性能很重要,LLVM 不是正确的选择吗? “这里”我找到了它支持的架构,但没有说它支持什么操作系统。如果我避免依赖平台的代码,它是否可以在所有操作系统上运行?如果可以的话,我会寻找更多更详细地解释 LLVM 的文章。

4

4 回答 4

9

安装了 llvm 类型

llc -version

你会看到类似的东西

  Registered Targets:
    alpha   - Alpha [experimental]
    arm     - ARM
    bfin    - Analog Devices Blackfin [experimental]
    c       - C backend
    cellspu - STI CBEA Cell SPU [experimental]
    cpp     - C++ backend
    mblaze  - MBlaze
    mips    - Mips
    mipsel  - Mipsel
    msp430  - MSP430 [experimental]
    ppc32   - PowerPC 32
    ppc64   - PowerPC 64
    ptx32   - PTX (32-bit) [Experimental]
    ptx64   - PTX (64-bit) [Experimental]
    sparc   - Sparc
    sparcv9 - Sparc V9
    systemz - SystemZ
    thumb   - Thumb
    x86     - 32-bit X86: Pentium-Pro and above
    x86-64  - 64-bit X86: EM64T and AMD64
    xcore   - XCore

转到 github.com 并搜索 mbed_samples 以查看用于 ARM 交叉编译的 llvm 和 clang。blinker03 或 04 附近的某个地方是它的来源。LLVM 在任何平台上的工作方式都相同,llc 步骤是您选择目标的地方,编译合并、优化等都是独立于平台的(例如,您可以使用 -m32选择 int 大小)然后 llc 将您带到平台相关的汇编程序。

于 2011-09-04T03:18:45.180 回答
5

就目标机器而言,LLVM 有许多可能的应用。

于 2011-09-06T20:35:18.380 回答
3

根据clang 手册,clang 可以针对 X86、Arm,部分支持 PPC、SPARC 和 MSP430。

不过,Clang 也可以生成 LLVM 字节码。LLVM 可以在更多的平台上运行。

因此,如果您想要本机机器代码,那么列表非常小。如果您想要 LLVM 字节码,您可以选择更广泛的平台。

于 2011-09-03T21:23:27.683 回答
1

我只是在这里回答编辑的问题(提出一个新问题可能更合适)。

是一个很好的 LLVM 架构概述。该页面还包含大量有关 LLVM 各个方面的文档。

简短的版本是 LLVM 是传统编译器的优化器和后端。它对字节码进行操作,字节码本质上是代码的中间表示,用于优化和生成最终的二进制文件。LLVM 前端是独立的,并使用自己的内部 AST 最终生成字节码。

当您想要生成最终的二进制文件时,LLVM 实际上非常灵活。您可以立即执行此操作,也可以将其延迟到程序安装完成。我相信你甚至可以在执行期间使用它的 JIT 来生成最终的二进制文件(这不是 100% 确定的)。像这样延迟的主要优点是它可以应用特定于它正在执行的环境的优化。

于 2011-09-04T03:31:58.817 回答