在嵌入式开发中,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。
交叉编译
本地编译:在当前目标平台下,编译出来的程序,放到当前平台下,就可以运行的交叉编译:在一种平台上编译,编译出来的程序,放到别的平台上运行(编译和运行环境不一样,属于交叉的)这里所谓的平台,实际上包含两个概念:体系结构和操作系统。同一体系结构可以运行不同的操作系统,同一操作系统也可以在不同的体系结构上运行。比如x86 Linux平台,实际上是Intel x86体系结构和Linux for x86操作系统的统称。再比如x86 WinNT平台,实际上是Intel x86体系结构和Windows NT for x86操作系统的统称。
交叉编译是一个和本地编译,相对应的概念。主要和嵌入式开发有关,由于嵌入式系统中的各种资源相对有限,只够嵌入式系统运行的,没太多剩余的资源,所以很难进行直接的本地编译。
交叉编译工具链
编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图:交叉编译工具链命名规则:在使用交叉编译链时,常常会看到下面这样的名字:
arm-linux-gnueabihf-
arm-none-linux-gnueabi-
arm-cortex_a8-linux-gnueabi-
mips-malta-linux-gnu-
这些交叉编译链的命名通常会遵循一定的规则:arch-vender-os-abi,各字段说明如下:arch:目标cpu架构,比如mips、arm、x86、riscv等,通常不会省略
vendor:提供此编译工具链的厂商名称或特定信息,标识信息,没有实际意义,可以为none、cross、unknow或是直接省略
os:目标设备上运行的操作系统,常见的有linux、none(裸机)等
abi:应用程序二进制接口,交叉编译链所选择的库函数和目标映像的规范,常见的值有abi 、eabi(embedded abi)、gun(glibc+oabi)、gnueabi(glibc+eabi)、gnueabihf(hf 指默认编译参数支持硬件浮点功能)等
本文整理自网络公开资料,侵删!
往期推荐
●
●
●
●
●
●
●
●






扫二维码|关注我们
微信号|andyxi_linux
专注于嵌入式开发技术

分享、在看与点赞
只要你点,我们就是胖友
