02-基础篇-编译器

前面章节描述了基于linux的嵌入式应用层开发在嵌入式系统所处的位置,本节主要讲述与嵌入式应用层开发相关的交叉编译器。

什么是交叉编译器,首先我们必须了解什么是编译。

首先我们建立一个hello.c 的程序。

#include <stdio.h>

int main()
{
    printf(“hello world!!!");
    return 0;
}

此hello.c文件以ascii码的方式存储于磁盘中,若此程序在要在linux系统运行,比如在ubuntu18.04上运行,必须对其进行编译。

gcc -o hello hello.c

此命令可以将hello.c翻译成机器能够识别的二进制文件hello。

此步编译命令分为4步:

(1).预处理阶段:修改原始的C文件,将第一行#include <stdio.h>命令告诉预处理器读取系统stdio.h头文件的内容,并插入到C文件中,得到hello.i。

(2).编译阶段:将hello.i翻译成hello.s。hello.s为汇编代码。

(3).汇编阶段:汇编器将hello.s翻译成机器指令hello.o

(4).链接阶段:由于hello.c中用到了其它库printf函数,链接器将对应printf.o合并到hello.o中,得到目标程序hello

至此,我们理解了整个程序编译的过程,并且用gcc编译的代码可以在对应的linux系统上直接运行。

我们在ubuntu 18.04上编译的目标文件正常在ubuntu18.04上运行,但是无法在目标的嵌入式开发板运行。

具体原因是由于电脑是属于X86-64架构,而我们的开发板是arm架构,两种架构对应的汇编指令或机器语言并不一样,所以我们写一个C文件的程序后,将程序翻译成机器指令,所需要的翻译官不一样。一般X86-64系统,自己的操作系统如ubuntu18,其系统内部装了翻译器gcc,因而可以直接将C语言翻译成目标二进制文件给电脑直接运行。

而普遍使用的arm类嵌入式开发板,其内存,磁盘都很小,在开发板上装对应的gcc很消耗开发板的资源,因而我们将arm开发板所对应的gcc编译器(比如:arm-himx200-gcc)安装在电脑上。执行

arm-himix200-gcc  -o hello  hello.c

生成的二进制文件就能够在对应的海思开发板上直接执行。

这种编译过程放在电脑上,而执行过程放在嵌入式开发板的过程,就叫做交叉编译,而开发板所对应的gcc或g++等编译器,叫做交叉编译器。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值