我知道这是一个非常基本的问题,但是当我用 gcc/g++ 编译我的 c/c++ 代码时,在汇编程序开始生成机器代码之前,中间输出的类型到底是什么?它是类似于 X86 指令的东西吗?
最佳答案
GCC的处理链如下:
你的源代码
预处理后的源代码(扩展宏和包含,去除注释)(
-E
,.ii
)编译成汇编(
-S
,.s
)汇编成二进制(
-c
,.o
)链接到可执行文件
在每个阶段,我都列出了使进程停在那里的相关编译器标志,以及相应的文件后缀。
如果使用-flto
编译,目标文件会被修饰为GIMPLE字节码,它是一种低级中间格式,目的是延迟实际最终编译到链接阶段,允许链接时间优化。
真正的“编译”阶段是真正繁重的部分。预处理器本质上是一个单独的、独立的工具(尽管它的行为是由 C 和 C++ 标准规定的),而汇编器和链接器实际上是独立的、独立的工具,基本上只是分别实现硬件的二进制指令格式和操作系统的可加载可执行格式。
关于c++ - gcc/g++ 输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243994/