美文网首页
1. C语言编译过程和硬件组成

1. C语言编译过程和硬件组成

作者: darcyaf | 来源:发表于2020-03-11 01:22 被阅读0次

    简单helloworld程序:

    # include <stdio.h>
    int main(void)
    {
      printf("hello world\n");
    }
    
    

    命令是gcc -o hello hello.c
    GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello
    这个翻译的过程可分为四个阶段

    • 预处理阶段
      gcc -E -o hello.i hello.c
      预处理器(cpp) 根据以字符#开头的命令, 修改原始的C程序,比如#include <stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并直接插入到程序文本中。 结果得到了另一个C程序,通常以.i结尾
    • 编译阶段
      gcc -S -o hello.s hello.c
      编译器(cc1)将文本文件hello.i 翻译成文本文件hello.s, 它包含了一个汇编语言程序。
    • 汇编阶段
      gcc -c -o hello.o hello.c
      汇编器ashello.s翻译成机器语言指令, 把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式, 并将结果保存在目标文件hello.o中。
      hello.o是一个二进制文件,它的字节编码是机器指令而不是字符,如果我们在文本编辑器中打开,看到的将是乱码
    • 链接阶段
      请注意,hello程序调用了printf函数, 他是每个C编译器都会提供的标准C库中的一个函数。 printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中, 而这个文件必须以某种方式合并到我们的hello.o程序中。
      链接器(ld)就负责处理这种合并。 结果就得到hello文件, 他是一个可执行目标文件,可以被加载到内存中,由系统执行.

    相关文章

      网友评论

          本文标题:1. C语言编译过程和硬件组成

          本文链接:https://www.haomeiwen.com/subject/cncadhtx.html