参考文章:百度百科
1.平台的概念:
我理解的平台是 体系结构(硬件)+操作系统(软件) 这两部分构成一个平台.当然特定的操作系统下编译环境不一样.
常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;
而x86 Win平台实际上是Intel x86体系结构和Windows for x86操作系统的简称。
2.本地编译:
在当前的平台上编写编译得到的可执行文件,只能在当前的平台下运行,局限性较大.
因为我们在开发和编译的时候使用的编译等工具都是针对当前开发平台的.
也就是说,如果要在别的平台运行当前平台的程序,需要在当前平台配置安装目标平台的编译环境.
3.交叉编译:
理解本地编译的局限性主要原因是平台不同,导致编译工具(软件硬件)以及编译方式等的不同,导致无法在其他平台运行.
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:
1、在Windows PC上,利用ADS(ARM开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。
包括最近在公司接触的一个项目,需要在x86 qnx px2等不同的平台上跑,然后在本机上安装好多对应qnx和px2的编译环境.
几个基本概念:
- 宿主机:即就是我们程序开发者用来开发程序的平台,如x86 linux或者x86 win等;
- 目标机:一般是非x86,也就是我们开发的程序最终要运行的平台,比如qnx,px2等;
- prefix:交叉编译器的安装位置;
- xxx-xxxx-xxxxx: 对于平台的描述,比如
像arm-linux、i386-pc-linux2.4.3这样的字符串我们经常会看到,其实它是用来描述平台的,它有完整格式、缩减格式和别名之分
完整格式是:CPU-制造厂商-操作系统,如sparc-sun-sunos4.1.4
说明平台所使用的CPU是sparc,制造厂商是sun,上面运行的操作系统是SunOS,版本是4.1.4
前三部分总结:
我们希望开发出来的项目以后运行在别的一些平台允许,但是由于目标机的平台资源比较贫乏或者项目在目标机上的
平台还没有搭建起来,所以就在开发平台(宿主机)上先安装目标机的编译环境,这就是交叉编译的大致原因和基本概念.