目录

GCC典型的编译过程:

预处理 

编译及优化

汇编命令:

链接

执行

Linux GCC 可执行程序的生成



GCC典型的编译过程:

  test.c 预处理 —>  test.i –编译 —>  test.s –汇编 —>  test.o –连接 —>  test

简单例子:

$ cat test.c        (查看程序源代码)

      #include <stdio.h>

      int main(int argc, char *argv[]) {          

                 printf("hello world\n");  

                 return 0;

      }

$ gcc -o test test.c  (编译连接程序)

$ ./test           (执行test程序)

预处理 

预编译命令:     $ gcc -o test.i -E test.c

执行结果:  生成预处理后的文件test.i, 该文件包含了test.c需要的所有的类型和函数申明。

 

编译及优化

编译命令: 

       $ gcc -o test.i -S test.c   (-E编译选项)

       $ gcc -o test.s -S test.i   (-S编译选项)

       $ cc1 -o test.s test.i        (cc1为C语言真正编译器)

结果:  生成汇编文件test.s, test.s中包含了AT&T的x86汇编代码。

 

汇编命令:

       $ gcc -o test.o -c test.s

       $ as -o test.o test.s

执行结果:    生成目标机器指令文件test.o(可以通过objdump查看汇编指令)

 

链接

执行命令:

       $ gcc -o test test.o

执行结果:  生成可执行文件test (可用objdump查看)

 

执行

执行过程    $  ./test

 

 

Linux GCC 可执行程序的生成过程

1.  –预处理(Preprocessing):分析各种预处理命令,如#define, #include, #if等;

2.  –编译(Compilation): 根据输入文件产生汇编语言的程序;

3.  –汇编(Assembly): 将汇编语言输入,产生扩展名为.o的目标文件;

4.  –链接(Linking):以.o目标文件,库文件作为输入,生成可执行文件;

 

希望对你有帮助。

 

源程序文件(.h, .c, .cc, .etc)  ----》  经预处理的文件(.i, .ii)  ----》  汇编语言文件(.s) ----》 目标文件(.o)  ----》 可执行程序(.out)

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐