在谈论交叉编译之前,我们先来聊聊编译。

1、编译

在程序开拓中,利用高等措辞编写的代码被称为源代码,比如用C措辞编写的后缀名为.c的文件,或者C++编写的后缀名为.cpp的文件。
源代码不能被机器实行,必须转换成二进制的机器代码(指令+数据)才能被CPU实行。
将源代码转换成机器代码的过程称为编译(Compile),编译的事情须要编译器(Complier)来完成。

php交叉编译嵌入式开辟  什么是交叉编译CROSSCOMPILE AJAX

编译器对源代码进行语法检讨,只有没有语法缺点的源代码才能被编译通过。
源代码经由编译后,并没有天生终极的可实行文件,而是天生一种被称为目标文件(Object File)的中间文件。
比如,Visual C++的目标文件后缀名为.obj,而GCC的目标文件后缀名为.o

源代码可能包含多个源文件,比如main.c/fun1.c/fun2.c等等,编译器会对源文件逐个进行编译。
因此,有几个源文件,就会天生几个目标文件;

目标文件并不能被实行,由于它可能存在一些问题,比如源文件之间的引用关系导致的问题。

举个例子:文件A.c引用了文件B.c中的变量\公众EXT_someflag\"大众,A.c和B.c分别编译天生A.o和B.o,A.o中并没有变量\公众EXT_someflag\"大众的定义,必须依赖B.o才能形成完全的代码。

同样的情形表现在源代码对库函数的引用。

把经由编译后天生的目标文件,按照其内在引用关系彼此相连接而天生一个完全的、可实行的文件的过程称为链接。

链接事情由链接器完成。

因此,源文件天生可实行文件要经由编译和链接两个步骤才能完成。
为了方便,我们也把这个过程统称为编译。
本文的主题\公众交叉编译\"大众也是包含了编译和链接的步骤,不再赘述。

与交叉编译相对应的是\"大众本地编译(native compile\公众)。

理解本地编译有助于更好地理解交叉编译,以是,我们先来看看什么是本地编译?

2、本地编译

所谓\"大众本地编译\"大众,是指编译源代码的平台和实行源代码编译后程序的平台是同一个平台。
这里的平台,可以理解为CPU架构+操作系统。
比如,在Intel x86架构/Windows 10平台下、利用Visual C++编译天生的可实行文件,在同样的Intel x86架构/Windows 10下运行。

3、交叉编译

所谓\公众交叉编译(Cross_Compile)\"大众,是指编译源代码的平台和实行源代码编译后程序的平台是两个不同的平台。
比如,在Intel x86架构/Linux(Ubuntu)平台下、利用交叉编译工具链天生的可实行文件,在ARM架构/Linux下运行。

交叉编译是相对繁芜的,必须考虑如下几个问题:

CPU架构:比如ARM,x86,MIPS等等;字节序:大端(big-endian)和小端(little-endian);浮点数的支持;运用程序二进制接口(Application Binary Interface,ABI);

为什么要利用交叉编译呢?紧张有两个缘故原由:

交叉编译的目标系统一样平常都是内存较小、显示设备简陋乃至没有,没有能力在其上进行本地编译;有能力进行源代码编译的平台CPU架构或操作系统与目标平台不同;

交叉编译工具链是进行交叉编译的必不可少的工具,是嵌入式开拓职员必须闇练节制的技能。
我们会在后续文章中对交叉编译工具链进行先容。

好了,关于交叉编译就先先容到这里。
如果你喜好这篇文章,可以辞官网(https://www.founderchip.com)下载本文PDF版本。