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

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

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

还是只能将某些语言转换为中间语言? 我想不言而喻,该中间产品需要某种类型的LLVM运行时? 不过,我从未真正听到过关于运行时的信息。

===============>>#1 票数:3 已采纳

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

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

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

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

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

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

还是只能将某些语言转换为中间语言? 我想不言而喻,该中间产品需要某种类型的LLVM运行时?

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

  ask by bob translate from so

未解决问题?本站智能推荐:

1回复

将项目(例如Emacs)编译为LLVM字节码

我克隆了Emacs源代码,目的是编译为LLVM字节码。 我已经花了几个小时摆弄Makefile标志,但是没有运气。 每当我使用此工具时,我都会得到与编译.el文件完全无关的结果。 所以我问你:如何将像Emacs这样的项目编译为LLVM字节码? 我在OS X 10.9 Maveri
2回复

从C ++类创建LLVM字节码

我正在为LLVM中的专用语言编写编译器。 我想为已经用C ++编写的库添加绑定。 我的想法是将库编译为LLVM字节码(使用clang -emit-llvm -S abc.c )并在编译过程clang -emit-llvm -S abc.c其链接。 这适用于类似的代码 但是图书馆的一
5回复

在LLVM字节码中查找循环

我想在LLVM字节码中找到简单的循环,并提取循环的基本信息。 例如: 我想提取绑定[0,1000],循环变量“i”和循环体(sum + = i)。 我该怎么办? 我阅读了LLVM API文档,并找到了一些有用的类,如“Loop”,“LoopInfo”。 但我不知道如何
3回复

使用clang将Apache httpd编译为LLVM字节码

我想使用clang将httpd编译为LLVM字节码。 首先,我尝试使用gcc对其进行编译 ,为此我做了以下工作: 并成功安装! 现在,我尝试使用clang对其进行编译,为此,我将执行以下操作: 并且,配置本身失败。 我选择了-O4,因为我读到如果您将-O4或-emit-
1回复

OpenCL内核的LLVM IR到PTX到二进制

我正在使用clang为Nvidia OpenCL和Cuda内核生成LLVM IR,我想随后对其进行检测,为OpenCL做如下操作: 的,什么是描述在这里对CUDA。 我正在寻找的是一种从仪器仪表IR转换为实际二进制文件的方法。 针对CUDA的情况下,我知道我可以使用NVPTX后端
1回复

试图掌握C字节码... GNU / gcc是否可以产生像Clang / LLVM这样的C字节码?

最近我被告知要查看C函数如何编译成LLVM字节码,然后将LLVM字节码如何转换为x86 ASM。 作为常规的GNU / gcc用户,我对此有一些疑问。 说得客气一点。 GNU / gcc也编译成字节码吗? 它可以? 我的印象是gcc直接编译成ASM。 如果没有,有没有办法查看字节
1回复

在OS X上安装clang和LLVM二进制文件

我已经从http://llvm.org/releases/download.html#3.3下载了OS X的clang二进制文件。 我应该放在哪里?
1回复

LLVM找不到Clang二进制文件

我刚刚使用编译器-rt构建并安装了LLVM Clang 3.5.0。 clang二进制文件似乎可以工作,但是无法构建简单的测试程序: 构建它失败, error: unable to execute command: Executable "" doesn't exist! 可执
2回复

LLVM和visual studio .obj二进制不兼容

有谁知道是否计划为visual studio组合.obj和静态.lib文件的LLVM二进制兼容性? 现在我只能将LLVM制作的.obj文件与动态库链接起来,这些动态库在运行时加载DLL(从visual studio编译)。 虽然两个编译器之间可能发生二进制兼容性的可能性非常小,但是有人知
1回复

使用LLVM / CLANG的自定义字节码VM的程序大小是多少?

我正在评估自定义VM的不同可能性,而我将LLVM排除在另一个问题之外。 由于我仍在进行嵌入式语言VM的评估,因此我目前无法自己对此进行测试/检查。 我想了解有关LLVM / CLANG的以下信息: Windows是否很好地支持? 还是Solaris? (跨平台对我来说是一个加号