compilation - 汇编文件、目标文件和二进制文件有什么区别?

标签 compilation clang llvm

我正在使用 Clang 编译器,但总是混淆汇编文件 (.s)、目标文件 (.o) 和二进制文件 (.bc)。谁能解释一下它们的区别?

最佳答案

汇编文件 (.s) 包含人类可读形式的机器指令,称为汇编语言。目标文件包含机器可读的二进制形式的相同指令。汇编文件可以由汇编程序 (as) 翻译成目标文件。

LLVM 位码文件 (.bc) 包含二进制形式的 LLVM 指令。它可以由 LLVM 编译器 (llc) 翻译成机器代码,或使用 LLVM 解释器 (lli) 直接执行。

您的问题中未列出的是 LLVM 程序集文件 (.ll)。它们包含与位码文件相同的指令,但采用人类可读的形式。可以使用 LLVM 汇编程序 (llvm-as) 将它们转换为位码文件。

关于compilation - 汇编文件、目标文件和二进制文件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428423/

相关文章:

java - 是否可以将 LLVM 字节码转换为 Java 字节码?

android - 是否可以将 LLVM 库编译为 android/ARM

java - <identifier> 预期 & .class 预期 java

c++ - Android Studio 3.3 (NDK) 上的错误警告

gcc - clang 是否有相当于 GCC 的 -mno-vzeroupper 标志?

c++ - 我可以使用 LLVM 来加速构建并减少 GCC 编译时间吗?

parsing - libclang 解析生成错误的输出

c++ - 编译按需可执行文件

python - 在 Linux 中,如何为不同版本的 Python 编译和安装代码?

command-line - 为什么不编译其他模块?