发布时间:2024-08-23 11:01
程序编译成可执行文件的过程可分为四步:预处理、编译、汇编、链接。下面将以main.c为目标文件进行详细讲解:
通过gcc -E main.c -o main.i 生成.i文件将进行如下操作:
1、将所有的#define删除,并展开所有的宏定义。
2、处理所有的预编译指令,例如:#if,#elif,#else,#endif等。
3、处理#include预编译指令,将被包含的文件插入到预编译指令的位置。
4、添加行号信息、文件名标识,便于调试。
5、删除所有的注释。
6、保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pargma指令来设定编译的状态或者是指示编译器完成一些特定的动作。
7、生成.i文件(包括去注释、宏替换、头文件展开、条件编译),编译生成的.i文件不包含任何宏定义,因为宏已经被展开,并且包含的文件已经被插入到.i文件中。
通过gcc -S main.i –o main.s 生成.s文件,需要进行如下操作:
1、扫描、语法分析、语义分析、源代码分析、目标代码生成、目标代码优化。
2、生成汇编代码。
3、汇总符号。
4、生成.s文件。
通过gcc –c main.s –o main.o 生成.o文件,需要进行如下操作:
1、根据汇编指令和特定平台,把汇编指令翻译成二进制形式。
2、合并各个section,合并符号表。
3、生成.o文件。
链接过程会进行如下操作:
1、合并各个.obj文件的section,合并符号表,进行符号解析。
2、符号地址重定位。
3、生成可执行文件。
1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了
flutter系列之自定义TabBar与PageView联动
微服务 springcloudAlibab之Sentinel 系统规则 自定义限流
维沃丫3手机微信无法连接服务器1.104,手机微信网络连接不可用?教你4个方法,轻松解决网络问题!...
Android AccessibilityService 事件分发原理分析总结
菏泽学院计算机学院康鸿雁,菏泽学院在山东省大学生软件设计大赛中获佳绩
(干货)基于 veImageX 搭建海报生成平台 -- 附源码