当前位置:首页 > 芯闻号 > 充电吧
[导读]编译器:就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor)



编译器:

就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables) 。

一:什么叫交叉编译器呢?

在解释什么叫交叉编译器前,我们必须要知道“本地编译”这个概念,在我们之前学习过得软件开发中,都属于本地编译,换而言之就是在x86平台下,直接将源文件编译出来的程序,编译出来的程序可以在当前平台下进行运行。在理解这个概念的前提下,我们接下来再来学习什么叫交叉编译器。

而所谓的交叉编译器,其实也很简单,就是在一种平台上编译出来的程序,不在是放在自己的机器上去运行,而是放到另外一个平台上去运行,也就是我们所说的环境不一样,而这也就是为什么称之为交叉编译器的原因,用英文解释,这就是所谓的cross。

二:体系结构与操作系统

1,常见的体系结构有ARM结构、x86结构等.

2,常见的操作系统有linux,windows等.

3,同一个体系结构可以运行不同操作系统,如x86上可以运行Linux、Windows等,在ARM上可以运行Linux、WinCE.

4,同一个操作系统可以在不同的体系结构上运行,比如Linux可以运行在x86上,也可以运行在ARM上.

5.同样的程序不可能运行在多个平台上,比如Windows下应用程序不能在Linux下运行.如果一个应用程序想在另一个平台上运行,必须使用针对该平台的编译器,来重新编译该应用程序的二进制代码,就像我们现在在身边进程遇到的,如果你使用的是苹果手机,下载需要的app,会提醒你下载适合苹果版本的,而如果你使用的是,那你就要选择androin的应用程序。

三:使用交叉编译器的原因

ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使用本地的编译器来编译程序.但是,编译器在编译程序时,会产生大量的中间文件,这会占用很大的内存和磁盘空间,且对CPU处理速度要求较高,比如S3C2440A内存、磁盘空间只有几十到100多兆,CPU只有400-500MHz,完全达不到编译程序的要求.所以,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器(当然我们也可以从我们简答的认识下去认识为什么使用交叉编译器,在我们平时开发的过程中,我们最多的使用的还是基于x86的平台,确切的可以说就是我们的pc机,因为pc机相对我们的开发板而言,资源是相对丰富的,我们可操作性较强)。

如果要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链,然后才能使用去编译源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.但编译器不是万能的,受版本限制,编译某些程序时会报错.常见的交叉编译工具链有:

1,Cross -2.95.3 tar: 该版本较早,除了编译vivi外一般不使用.

2,arm920t-eabi.tgz: 4.1.2版本的编译器,支持eabi,可以编译TX2440A开发板上的所有程序.

3,arm-linux-gcc: 4.3.2版本的编译器,支持eabi,是最常见的交叉工具链.

什么是EABI

EABI,Embeded application binary interface,即嵌入式应用二进制接口,是描述可连接目标代码、库目标代码、可执行文件影像、如何连接、执行和调试以及目标代码生成过程,和c, c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础.简而言之,EABI就是一种编译规范,交叉编译器在编译时,对于浮点运算会使用硬浮点运算,提高了浮点运算的性能,节省了编译时间.

四:交叉编译工具链实例

1、arm-none-eabi-gcc

(ARM architecture,no vendor,not target an operating system,complies with the ARM EABI)

用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是 newlib 这个专用于嵌入式系统的C库。

2、arm-none-linux-gnueabi-gcc

(ARM architecture, no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI)

主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过 Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有 Linux 操作系统的会用到.

3、arm-eabi-gcc

Android ARM 编译器

4、armcc

ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的.

5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc

arm-none-uclinuxeabi 用于uCLinux,使用Glibc.

arm-none-symbianelf 用于symbian,没用过,不知道C库是什么 .

五:安装交叉工具链实例

1,将arm-cortex_a8-linux-gnueabi.tar.bz2交叉编译器压缩包复制到虚拟机主目录;

2,解压arm-cortex_a8-linux-gnueabi.tar.bz2压缩包;

tar xvf arm-cortex_a8-linux-gnueabi.tar.bz2

3,进入配置文件修改环境变量;

sudo vi /etc/bash.bashrc

进入之后在最后一行添加如下代码:

export PATH=$PATH:/home/fs/arm-cortex_a8/bin

注:fs为名叫fs的用户

4,配置生效:

source /etc/bash.bashrc

5,测试:

在命令行输入:

arm-c{TAB}(按TAB可以补全,说明交叉编译器安装成功)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

使用环境Ubuntu 12.042,VMware Workstation3,微集成7英寸4418 Linux平板电脑安装用于gcc-linaro-arm的交叉工具包。该程序包位于虚拟机的适当目录中,该目录在以下目录中进行...

关键字: Linux 交叉编译 工业平板

源码下载官网: https://w1.fi/releases/ libnl-1.1.4交叉编译: ./configure CC=xx-gcc \ --prefix=/home/xx/openspur

关键字: 交叉编译 源码

一、什么是交叉编译       在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台

关键字: 交叉编译

先来简单谈谈生成一个可执行文件所需要的过程 预处理(preprocessing)->编译(compilation)->汇编(assembly)->连接(linking) 编译:.c-

关键字: makefile 交叉编译

本文是对《深度探索linux操作系统系统构建和原理解析》的笔记,目的是为了理解操作系统,重点放在了各种依赖关系上,没有刻意去记录细节。1.疑惑构建目标系统的时候,即使目标系统和宿主系统运行在同一个体系

关键字: 交叉编译 构建linux

具体内容:  首先需要安装macports安装完成后我们使用命令:callondeMacBook-Pro:~ callon$ sudo port install libelf Password: Er

关键字: macbook 交叉编译

1> 解压下载的交叉工具链2> vi /etc/profile在这个文件最后添加上自己的环境变量:export PATH=$PATH:/usr/local/arm/4.3.2/bin($PATH后面为解压的交...

关键字: ARM 交叉编译 环境配置

关于ARM交叉编译工具链的介绍与下载请点我跳转 一、简介:简单介绍一下:交叉编译器一般来说是针对某个特定版本的uboot和kernel来专门制作的,也就是说,如果一个开发板的uboot和内核版本确定

关键字: ARM 交叉编译

在工作目录下建立helloworld.c文件#includemain(){printf("helloworld!\\n");}保存关闭后。编译helloworld文件:root@snail:/home...

关键字: 交叉编译 tiny6410

ACE应用于主站数据采集核心的开发已告一段落了。现在打算涉足嵌入式linux应用程序的设计。俗话说“工欲善其事,必先利其器”,ACE支持arm系列的嵌入式系统,当然首先折腾他了,后期还打算整整apache的运行时库apr...

关键字: ace arm-linux 交叉编译
关闭
关闭