分享
 
 
 

交叉编译

王朝百科·作者佚名  2010-01-14
窄屏简体版  字體: |||超大  

一、什么是交叉编译什么是交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓

平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结

构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说

的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是

Intel x86体系结构和Windows NT for x86操作系统的简称。

一个经常会被问到的问题就是,“既然我们已经有了主机编译器,那为什么还要交叉编译呢?”其实答案很简

单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器

的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没

有建立,连操作系统都没有,根本谈不上运行什么编译器。

另一个经常会被问到的问题就是:“既然可以交叉编译,那还要主机编译干吗?”其实答案也很简单,交叉编

译是不得已而为之!与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编

译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举

例来说,我们至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为

HPPA-HPUX的交叉编译。

就我们这个项目而言,需要交叉编译的原因有两个:首先,在项目的起始阶段,目的平台尚未建立,因此需

要做交叉编译,以生成我们所需要的bootloader(启动引导代码)以及操作系统核心;其次,当目的平台能

启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。

二、交叉编译的基础知识在做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是理解一些我们经

常会碰到的英文单词;)

host 主机平台。

target 目的平台。

perfix交叉编译器的安装位置。

xxx-xxxx-xxxxx 平台描述。

我们在主机平台上开发程序,并在这个平台上运行交叉编译器,编译我们的程序;而由交叉编译器生

成的程序将在目的平台上运行。这里值得说明得是平台描述,象arm-linux、i386-pc-linux2.4.3这样的字

符串我们经常会看到,其实它是用来描述平台的,它有完整格式、缩减格式和别名之分。完整格式是:

CPU-制造厂商-操作系统,如sparc-sun-sunos4.1.4,说明平台所使用的CPU是sparc,制造厂商是sun,上面

运行的操作系统是SunOS,版本是4.1.4。当然,我们都不愿记这么长的东西,因此可以使用短格式,短格式

中有选择地去处了制造厂商、软件版本等信息,因此我们同样可以用sparc-sunos或sparc-sunos-sunos4来

描述这个平台。如果觉得这个还是太麻烦,那就可以使用别名,sun4m就可以很简单地描述这个平台。需要

注意的是,并不是所有的平台都有别名,也不是所有的短格式都可以正确地描述平台。

三、我需要准备些什么怎么说呢,你先得准备好主机平台,对我们这个项目来说,我们建议采用x86 Linux做主机平台,因为这样需

要的设置工作最少。当然你也可以使用你所喜欢的平台或你所能得到的平台,其中的区别在于你可能必须做

更多的设置工作,当然也有这种可能,就是你所选择的主机平台根本不能生成适用于目标平台的正确的交叉

编译器。

对于交叉编译器,可以自己生成,也可以从网上下载。区别在于从网上下载非常简单方便,但也许你找不到

适合你所选择的平台的。而自己生成交叉编译器,有时会遇到很多挫折,但这的确是个有趣的值得怀念的经

历。

如果你想自己生成交叉编译器,那你必须先准备下面这些东西

1、磁盘空间。至少要500M左右的空间,如果想一气呵成的话,那就要900M-1G的空间。

2、各种源代码。你至少要准备binutils-2.11.2、gcc-2.95.3、linux-2.4.6、newlib-1.8.2或glibc-2.2.2

的源代码。

如果你所使用的主机平台不是运行的linux,那你还必须注意以下这些问题

1、GNU bash必须是默认shell,所以你也许得把/bin/sh改成bash。

2、你要确认已经安装了GNU bison,因为这些软经同样使用了bison扩展。

3、GNU gmake最好是系统默认得make,因为这些软件都使用了gmake扩展,如果不是,在需要make时,记得

使用gmake。

4、如果你想生成交叉glibc,则GNU gsed必须是默认sed,因为glibc会用到gsed的扩展。

5、如果你想生成交叉glibc,那还必须准备glibc-linuxthreads-2.2.2的源代码。

6、确认正确的路径搜索顺序,最好让GNU软件首先被执行。

四、怎样生成交叉编译器我们建议使用现成的脚本来生成交叉编译器,因为在配置交叉编译器时,会经常使用一些难以理解的开关项。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有