本地编译:
我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来可以运行的程序(或者库文件),其可以直接在当前的环境,即x86的CPU下,当前电脑中运行。此时的编译叫做本地编译,即在当前目标平台下,编译出来的程序,也只是放到当前平台下,就可以运行的。
交叉编译:
交叉编译是一个和本地编译相对应的概念。而所谓的交叉编译,就是在一种平台上编译,编译出来的程序是放到别的平台上运行即编译的环境,和运行的环境不一样,属于交叉的。交叉编译,这个概念,主要和嵌入式开发有关。
例如在x86平台上编译,在ARM上运行。
为何要有交叉编译:
之所以要有交叉编译,主要原因是:嵌入式系统中的资源太少。具体的解释就是:交叉编译出来的程序,所要运行的目标环境中,各种资源,都相对有限,所以很难进行直接的本地编译
最常见的情况是:在进行嵌入式开发时,目标平台,即嵌入式开发板,比如是最大主频200MHz的ARM的CPU,加上32M的RAM,加上1G的Nand Flash等等。在如此相对比较紧张的硬件资源的前提下,在已经运行了嵌入式Linux的前提下,是没法很方便的直接在嵌入式Linux下,去本地编译,去在ARM的CPU下,编译出来,供ARM的CPU可以运行的程序的。因为编译,开发,都需要相对比较多的CPU,内存,硬盘等资源,而嵌入式开发上的那点资源,只够嵌入式(Linux)系统运行的,没太多剩余的资源,供你本地编译。