LLVM和编译器命名法

Eph*_*era 14 assembly compilation llvm clang llvm-ir

我正在研究LLVM系统,我已经阅读了入门文档.然而,一些命名法(以及铿锵例中的措辞)仍然有点令人困惑.以下术语和命令都是编译过程的一部分,我想知道是否有人能够更好地解释它们对我来说:

  • clang -Svs. clang -c(我知道是什么-c,但结果如何不同?)*(编辑)
  • LLVM Bitcode与LLVM IR(有什么区别?)
  • .ll文件与.bc文件(它们是什么,它们有什么不同?)
  • LLVM汇编代码本机汇编代码(有区别吗?)

在一个较高的水平,我了解整个编译过程,并且可以通过跟踪我的路还算好,我只是陷在一些点在哪里,例如,我期待看到"IR",而是看"位码"或" LLVM汇编"这让我认为我不理解它们几乎和我应该的一样!

Oak*_*Oak 24

Clang用法

通常,Clang接受与GCC相同的命令行选项.该-c选项(只编译和汇编,不链接)和-S期权(只编译,不进行汇编和链接)是指在两个同样的事情.

关于中间表示的LLVM术语

引用我在本网站上的另一个答案:

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

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

  • 存储在.bc文件中的二进制格式也称为bitcode(虽然我偶尔会听到应用于一般IR的术语"bitcode")
  • IR还称为LLVM程序集LLVM汇编语言

无论如何,在可能不同的表示下,这一切都意味着相同的事情.

原生大会

本机组件是许多人在听到术语"汇编"时通常会想到的 - 低级语言几乎以1:1映射到本机二进制文件,与LLVM汇编不同,本机汇编非常依赖于目标(例如x86汇编,ARM组装等).本机程序集通过汇编程序组装成本机二进制文件 - LLVM确实包含一个,但您也可以使用其他汇编程序(例如gas).

原生二进制 - 组装过程的结果 - 当然是计算机真正说的(唯一)语言,在链接后,它可以加载到内存中并直接在硬件上运行.

  • @HongxuChen在纸上写下"三"和"三".现在阅读你大声朗读的内容.它的阅读方式相同而且意思相同,但纸上有两种不同的表现形式,一种纸张面积比另一种纸张面积多.它与LLVM IR相同.无论如何,没有传递将一个转换为另一个,因为当从LLVM加载到内存中时,你会得到完全相同的东西. (7认同)