怎么将代码转换为可执行文件,并在芯片中运行

gcc “编译”过程

预处理

1. 预处理标识

	预处理命令通常带有前缀 # 例如 #include<stdio.h>、#define、#if。

2. 预处理的作用

	预处理通常做的是文本替换功能。

**例如**:
#include<stdio.h>

将库函数stdio头文件中声明的相关函数以及变量等所有存在的信息完完本本的添加到头文件引用,处这样做的好处之一是为了开发者考虑,因为我们不可能将所有的代码都放到一个文件中;

#define π 3.14 

是将3.14标识为π,方便在文件中直接使用,如果我们以后想更改π的精度可以直接在宏定义处修改 #define π 3.1415926

编译

编译器将 .c 文件转换成对应平台下的 .s 汇编代码 。 

大致过程是通过词法分析和语法分析判断我们使用的指令和语法是否正确,将其翻译成对应的汇编代码。此时生成的.s文件我们依然可以比较高效的查看。想要了解编译器生成汇编具体过程可以查阅。编译原理

汇编

汇编是指把汇编代码 .s 翻译成(可重定位文件).o 文件的过程

可重定位文件中有几段内容 :data段(已初始化数据段,例如已初始化全局变量),rodata(只读数据段,例如const修饰的变量) ,bss段(未初始化数据段,例如非静态局部变量),代码段,符号表(外部变量和其他文件定义的函数等,详细解释可以了解ELF文件格式)。
可重定位文件的一个重要作用就是指示出各个变量以及函数(本文件对应的c文件)相对于可重定位文件的位置;以及将引用的外部变量和函数记录在符号表中用来指示出给链接器(因为编译器并不知道外部的变量的函数的具体位置),让它注意做相应的链接处理。

链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值