简述用gcc进行编译的过程
源程序 helloworld.c
预处理
用gcc -E
命令进行预处理,包括加入头文件,替换宏
执行结果如下:
可以看到,main
函数的内容未发生改变,但是#include “stdio.h”
被替换了。替换后的代码过长,没有完全展示。
编译
用gcc -S
命令进行编译,包含预处理,将C程序转换成汇编程序
执行结果如下:
main
函数的主要部分在红框中,包括调用puts
打印结果。
汇编
用gcc -c
命令进行汇编,包含预处理、编译,将汇编程序转换成可链接的二进制程序。
执行结果如下:
可以看到,二进制程序已无法用vim
工具阅读。但可以用objdump
命令查看。objdump
是一个GNU
二进制文件工具,它能够让你查看目标文件或者可执行文件的构成。这个命令可以以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。
执行结果如下:
链接
用gcc -o
命令进行汇编,包含以上所有操作,将可链接的二进制程序和其他库链接在一起,形成可执行的程序文件。
在命令行输入./helloworld
即可运行可执行文件:
总结
本文使用HelloWorld示例简单介绍了用gcc
编译的“预处理->汇编->编译->链接"流程,在实际使用中,可以直接用gcc helloworld.c -o hellowolrd
完成编译。