分类: 嵌入式
2014-12-04 20:34:13
gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的,是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机器码。这些机器码代表什么含义只有机器本身能理解。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。举个例子你的可执行程序里面有一句01011.这句在linux下面可能是吃饭的意思,但是在windows下面可能01011是撒尿的意思。那你说linux的可执行程序放在window下面能正常运行吗?肯定不能嘛。你要的目的是吃饭,它帮你执行撒尿很显然就不对了。同样的可能01011在ARM下面的意思是睡觉。不同系统的机器码含义是不一样的。所以你在linux系统下面写的代码要怎样才能在ARM系统上面跑呢。这就需要用到交叉编译。
arm-linux-gcc是什么意思?就是告诉你的编译器,我编写的环境是linux,但是我希望生成的可执行程序是在arm上面跑的。这就是交叉编译。编写环境和执行环境分离的一种手段。
理论上说, 当我们把linux经过修改移植到ARM9上面后, 我们也还可以直接在开发板上用gcc进行编译, 这样生成的文件就可以直接在开发板上运行, 但是我们都知道, 编译过程中会产生很多过程文件, 会占用很大的内存, 并且编译需要很大的内存,这样显然在开发板上直接编译很不合适, 所以就采用交叉编译的方式.
它们会把同一个c源码编译成不同的汇编指令然后生产不同平台的二进制可执行的文件, 也就是说两种编译器执行的是不同的编译标准, 常见的标准有EABI, 什么是EABI?Embedded application binary interface, 即嵌入式应用二进制接口,是描述可连接目标代码,库目标代码,可执行文件影像,如何连接,执行和调试,以及目标代码生成过程,和c, c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础。