LLVM编译器和命名(LLVM and compiler nomenclature)

2019-08-05 04:42发布

我期待到LLVM的系统,我已经通过阅读入门文档 。 然而,一些命名法(和在铛示例的措辞)仍有点混乱。 下列术语和命令编译过程的一部分,我想知道是否有人也许能好一点解释它们对我来说:

  • clang -Sclang -c (我知道什么-c做,但是怎么做的结果有什么不同?)*(编辑)
  • LLVM位码与LLVM IR(的区别是什么?)
  • .ll文件与文件.BC(它们是什么,他们是如何不同?)
  • LLVM汇编代码原生汇编代码 (是有区别吗?)

在一个较高的水平,我了解整个编译过程,并且可以通过跟踪我的方式还算不错,我只是陷在一些点在哪里,例如,我期待看到“IR”,而是看“位码”或“ LLVM汇编”这使我觉得我不理解他们几乎和我一样应该!

Answer 1:

锵用法

一般而言,锵接受相同的命令行选项为GCC。 该-c选项(只编译和汇编,不链接)和-S选项(只编译,不进行汇编和链接)是指在两个同样的事情。

关于中间表示LLVM条款

要引用这个网站我的另一个答案 :

LLVM IR通常存储在磁盘上有.ll扩展或者文本文件或与.BC扩展二进制文件。 两者之间的转换是微不足道的,你可以只使用llvm-disBC - > 11llvm-asLL - > BC。 二进制格式是更内存效率,而文本格式是人类可读的。

在另外的,还有一些常用的别名:

  • 二进制格式,存储在.BC文件,也被称为位码 (虽然我偶尔听到的术语“位码”适用于一般IR以及)
  • 该IR也被称为LLVM组件 或LLVM汇编语言

在任何情况下,这一切都意味着同样的事情,在潜在的不同表述。

本机汇编

本机汇编是许多通常认为听力术语“集结号”的时候约-几乎1低级语言:1映射到你的本机二进制文件,而不像LLVM组件,本地组装非常依赖于目标的(例子是x86汇编,臂组件,等等)。 本地组件经由汇编组装成机二进制- LLVM不包括一个,但你也可以使用其他的汇编,以及(如gas )。

本机二进制 - 装配过程的结果 - 当然是(只)语言的计算机很清楚的说明,以及连接后可以加载到内存中,并在您的硬件直接跑了。



文章来源: LLVM and compiler nomenclature