C语言的编译流程

39 篇文章 6 订阅
9 篇文章 0 订阅

通常我们编译程序是这样的

gcc xxx.c -o test

这样这个可执行文件test就可以直接执行了,编译器帮我们做的东西太多了
我们需要了解一下这个过程

1、预编译

把所有的宏展开

#define LED p0^0
LED = 1;
这一步就是将LED替换成p0^0

宏定义可以使得我们代码的可阅读性变强,一定要多用宏定义

gcc -E main.c > main.i

编译器将main.c预处理结果输出 main.i 文件

处理条件编译

#ifdef SENYUN

#ifden HIKCAM

#end if
比如做摄像头的时候

  • 如果是森云相机,就编译第一个ifdef
  • 如果是海康相机,就编译第二个ifdef

处理includ文件

#include <stdio.h>
这一步电脑直接将头文件里的内容直接替换到这个位置

删除所有注释

2、编译

本来是一个.c文件,这一步生成汇编文件.S

gcc -S main.i -o main.s

.c -->.S

3、汇编

将上一步生成的.S文件翻译成机器码(二进制)

gcc -c main.s -o main.o

生成.o文件

4、链接

gcc main.o -o main

最终生成可执行文件

动态库链接
静态库链接
参考我另一篇博文
https://blog.csdn.net/qq_28258885/article/details/110530168

生成elf文件和bin文件
这两种都是二进制文件,并且是都可以直接读得懂的

  • bin:只有二进制的机器码,只有成需要执行的部分
  • elf:除了二进制的机器码,还有段的加载地址,运行地址,重定位表,符号表

最后放在flash上的只有bin文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spark!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值