我期待到LLVM的系统,我已经通过阅读入门文档 。 然而,一些命名法(和在铛示例的措辞)仍有点混乱。 下列术语和命令编译过程的一部分,我想知道是否有人也许能好一点解释它们对我来说:
-
clang -S
与clang -c
(我知道什么-c
做,但是怎么做的结果有什么不同?)*(编辑) - LLVM位码与LLVM IR(的区别是什么?)
- .ll文件与文件.BC(它们是什么,他们是如何不同?)
- LLVM汇编代码与原生汇编代码 (是有区别吗?)
在一个较高的水平,我了解整个编译过程,并且可以通过跟踪我的方式还算不错,我只是陷在一些点在哪里,例如,我期待看到“IR”,而是看“位码”或“ LLVM汇编”这使我觉得我不理解他们几乎和我一样应该!
锵用法
一般而言,锵接受相同的命令行选项为GCC。 该-c
选项(只编译和汇编,不链接)和-S
选项(只编译,不进行汇编和链接)是指在两个同样的事情。
关于中间表示LLVM条款
要引用这个网站我的另一个答案 :
LLVM IR通常存储在磁盘上有.ll扩展或者文本文件或与.BC扩展二进制文件。 两者之间的转换是微不足道的,你可以只使用llvm-dis
为BC - > 11和llvm-as
对LL - > BC。 二进制格式是更内存效率,而文本格式是人类可读的。
在另外的,还有一些常用的别名:
- 二进制格式,存储在.BC文件,也被称为位码 (虽然我偶尔听到的术语“位码”适用于一般IR以及)
- 该IR也被称为LLVM组件 或LLVM汇编语言
在任何情况下,这一切都意味着同样的事情,在潜在的不同表述。
本机汇编
本机汇编是许多通常认为听力术语“集结号”的时候约-几乎1低级语言:1映射到你的本机二进制文件,而不像LLVM组件,本地组装非常依赖于目标的(例子是x86汇编,臂组件,等等)。 本地组件经由汇编组装成机二进制- LLVM不包括一个,但你也可以使用其他的汇编,以及(如gas
)。
本机二进制 - 装配过程的结果 - 当然是(只)语言的计算机很清楚的说明,以及连接后可以加载到内存中,并在您的硬件直接跑了。