gcc 工作流程

一,预处理:gcc test.c -E -o test.i

 

               1.将所有的#define删除,并展开所有的宏定义; 

               2.处理所有的预编译指令,例如:#if,#elif,#else,#endif; 

               3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置; 

               4.添加行号信息文件名信息,便于调试; 

               5.删除所有的注释:// /**/; 

               6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。 

生成.i文件。

 

二、编译:C语言——》汇编    gcc test.i -S-o test.s  变成汇编语言保存在test.s中

                1.扫描,语法分析,语义分析,源代码优化,目标代码生成,目标代码优化;

                2.生成汇编代码;

                3.汇总符号; 

                4.生成.s文件

三、汇编:汇编——》二进制  gcc test.s -c-o test.o   test.o是二进制文件

                1.根据汇编指令和特定平台,把汇编指令翻译成二进制形式;

                2.合并各个section,合并符号表; 

                3.生成.o文件

四、链接              gcc test.o -o a.out   生成a.out可执行文件

                1.合并各个.obj文件的section,合并符号表,进行符号解析; 

                2.符号地址重定位; 

                3.生成可执行文件

-D        在编译的时候定义宏。

-I          制定头文件路径。

-g          gdb调试的时候需要添加参数。

-O         编译优化,3个等级    -O(1-3).

-Wall     编译期间输出警告信息。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值