【问题标题】:Do compilers have to go through assembly level when producing its object codes? [duplicate]编译器在生成目标代码时是否必须经过汇编级别? [复制]
【发布时间】:2012-01-06 12:21:16
【问题描述】:

可能重复:
Do programming language compilers first translate to assembly or directly to machine code?

例如:

gcc -c myprogram.c

上面的命令将生成 myprogram.o,它是一个目标文件。我想在内部知道,GCC 是否必须经过汇编程序步骤?例如:

myprogram.c -> myprogram.asm -> myprogram.o

【问题讨论】:

    标签: c assembly compiler-construction object-files


    【解决方案1】:

    据我所知,是的。 gcc 生成的汇编代码用于编写目标文件。

    【讨论】:

      【解决方案2】:

      编译器在您提到的地方转换为程序集是标准的。至于“他们必须吗?” -- 可以编写一个不这样做的编译器,但是现在它既不典型也不可能发生。

      【讨论】:

      • 您必须为正在编译的代码编写机器级别的表示,无论是用于虚拟机(因此不称为汇编)还是用于硬件处理器目标(DSP、Intel 处理器) ,ARM处理器等)。除非,你怎么能执行它?
      【解决方案3】:

      当您调用 gcc 时,您实际上是在为您的目标架构生成汇编代码,作为编译器的内部步骤。

      尝试使用-S 选项查看编译器生成的汇编代码。

      可执行目标文件由链接器生成,链接器将作为您发出的命令的一部分在内部调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2013-09-14
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        相关资源
        最近更新 更多