编译链接过程
1、预编译
预处理主要处理那些以 # 开始的预编译命令。如:#include, #define;
主要规则包括:
1、将所有的 #define 宏展开;
2、所以所有条件预编译指令,如:#if,#ifdef,#elif,#endif;
3、将所有的 #include 指令展开,将被包含的文件插入到该 预编译指令的位置。这个过程是递归进行的;
4、删除所有的注释,如://,/* *、;
5、天假行号和文件名标识;
6、保留所有的 #progma 编译器指令,因为编译器需要使用它们;
预编译命令:gcc -E hello.c -o hello.i 或者 cpp hello.c > hello.i
2、编译
编译过程就是把 预处理完的文件进行一系列的词法分析,语法分析,语义分析和优化,生成相应的汇编代码文件。
这是整个编译链接过程最复杂的环节之一。
编译指令:gcc -S hello.c -o hello,s 或者 gcc -S hello.i -o hello,s 或者 ccl hello.c
3、汇编
汇编过程就是把 汇编代码 变成机器可执行的指令的过程,
汇编指令:gcc -c hello.c -o hello,o 或者 gcc -c hello.s -o hello,o 或者 as hello.c -o hello,o
4-、链接
链接指令:ld