gcc 的编译过程

首先我们写一个简单的练习,命名为exercise1.c

#include <stdio.h>

int main(int argc, char const *argv[])
{
   printf("Goodbye, Dannis!\n");
   return 0;
}
  • 直接编译:exercise1.c ——> 可执行文件exercise1

    gcc -o exercise1 exercise1.c
    
  • 预处理: exercise1.c ——> exercise1.i

    gcc -E exercise1.c -o exercise.i
    

    注意:gcc -E exercise1.c 即是预处理,-o 指定了预处理之后的文件存放的位置。如果去掉 -o exercise.i,预处理之后的内容将直接显示在命令行

    exercise1.s文件内容
    上图是exercise1.i文件内容,我们可以看到#include <stdio.h>被替换成了stdio.h的文件内容

  • 编译:exercise1.i ——> exercise1.s

    gcc -S exercise1.i
    

    exercise1.o文件内容

    上图是exercise1.s文件内容,已经是汇编代码了

  • 汇编:exercise1.s ——> exercise1.o

    gcc -c exercise1.s
    

    exercise1.o文件内容

    上图是exercise1.o文件内容,已经被翻译成了机器码

  • 链接:exercise1.o ——> 可执行文件exercise1

    gcc exercise1.o -o exercise1
    

update at 2017/9/20
by 一颗球

posted @ 2017-09-20 19:38  一棵球和一枝猪  阅读(159)  评论(0编辑  收藏  举报