美文网首页
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