Eph*_*era 14 assembly compilation llvm clang llvm-ir
我正在研究LLVM系统,我已经阅读了入门文档.然而,一些命名法(以及铿锵例中的措辞)仍然有点令人困惑.以下术语和命令都是编译过程的一部分,我想知道是否有人能够更好地解释它们对我来说:
clang -Svs. clang -c(我知道是什么-c,但结果如何不同?)*(编辑)在一个较高的水平,我了解整个编译过程,并且可以通过跟踪我的路还算好,我只是陷在一些点在哪里,例如,我期待看到"IR",而是看"位码"或" LLVM汇编"这让我认为我不理解它们几乎和我应该的一样!
Oak*_*Oak 24
通常,Clang接受与GCC相同的命令行选项.该-c选项(只编译和汇编,不链接)和-S期权(只编译,不进行汇编和链接)是指在两个同样的事情.
引用我在本网站上的另一个答案:
LLVM IR通常存储在磁盘上有任何文本文件.ll扩展或与二进制文件.BC扩展.两者之间的转换是微不足道的,你可以只使用
llvm-dis了BC - > LL和llvm-as为LL - > BC.二进制格式的内存效率更高,而文本格式是人类可读的.
另外,还有一些常用的别名:
无论如何,在可能不同的表示下,这一切都意味着相同的事情.
本机组件是许多人在听到术语"汇编"时通常会想到的 - 低级语言几乎以1:1映射到本机二进制文件,与LLVM汇编不同,本机汇编非常依赖于目标(例如x86汇编,ARM组装等).本机程序集通过汇编程序组装成本机二进制文件 - LLVM确实包含一个,但您也可以使用其他汇编程序(例如gas).
原生二进制 - 组装过程的结果 - 当然是计算机真正说的(唯一)语言,在链接后,它可以加载到内存中并直接在硬件上运行.