0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式开发中的交叉编译详解

嵌入式攻城狮 来源:嵌入式攻城狮 2023-12-01 13:24 次阅读

嵌入式开发中,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。

交叉编译

本地编译:在当前目标平台下,编译出来的程序,放到当前平台下,就可以运行的

交叉编译:在一种平台上编译,编译出来的程序,放到别的平台上运行(编译和运行环境不一样,属于交叉的)

这里所谓的平台,实际上包含两个概念:体系结构操作系统。同一体系结构可以运行不同的操作系统,同一操作系统也可以在不同的体系结构上运行。

比如x86 Linux平台,实际上是Intel x86体系结构和Linux for x86操作系统的统称。

再比如x86 WinNT平台,实际上是Intel x86体系结构和Windows NT for x86操作系统的统称。

交叉编译是一个和本地编译,相对应的概念。主要和嵌入式开发有关,由于嵌入式系统中的各种资源相对有限,只够嵌入式系统运行的,没太多剩余的资源,所以很难进行直接的本地编译。

交叉编译工具链

编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图:

wKgaomVpbiGAMZPPAAHkqAqs3yY353.png

编译过程包括了预处理、编译、汇编、链接等功能。每个子功能都是一个单独的工具来实现,它们合在一起形成了一个完整的工具集。

同时编译过程又是一个有先后顺序的流程,牵涉到工具的使用顺序,每个工具按照先后关系串联在一起,形成了一个编译工具链。

交叉编译工具链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。

同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)。

交叉编译工具链命名规则

在使用交叉编译链时,常常会看到下面这样的名字:

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 指默认编译参数支持硬件浮点功能)等

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288430
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206734
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121876
  • 交叉编译
    +关注

    关注

    0

    文章

    31

    浏览量

    12560

原文标题:什么是交叉编译?为什么需要交叉编译?

文章出处:【微信号:嵌入式攻城狮,微信公众号:嵌入式攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式开发入门之旅

      课程目标:本次免费体验课程将按照嵌入式开发设计的流程,从嵌入式开发基本概念、嵌入式项目流程详解嵌入式ARM处理器
    发表于 07-09 16:57

    嵌入式开发入门之旅

    种类、嵌入式Linux在嵌入式产品的应用、如何将Linux安装到开发板上4.  我也来编译Linux操作系统
    发表于 07-10 15:59

    嵌入式学习路线 嵌入式学习路线详解

    ,创客学院嵌入式开发讲师整理了最全最短的嵌入式学习路线途径,希望可以对读者们有所帮助。  嵌入式学习路线 嵌入式学习路线详解:  1、Lin
    发表于 03-17 18:05

    ARM嵌入式Linux系统开发详解

    大量读者好评的“Linux典藏大系”的《ARM嵌入式Linux系统开发详解》的第2版。《Linux典藏大系:ARM嵌入式Linux系统
    发表于 09-14 08:57

    嵌入式开发和普通桌面开发的区别是什么?

    前几天别人问我做嵌入式开发和普通桌面开发有什么区别,当时回答的不全面,今天来总结一下:嵌入式开发在宿主机上编辑、编译程序,在目标机运行测试程序,称为
    发表于 10-28 08:30

    嵌入式开发工具使用

    嵌入式开发工具使用一.实验目的二.实验内容三.预备知识四.实验设备及工具(包括软件调试工具)五.实验步骤5.1 交叉编译工具配置及编译5.2arm-linux-gcc
    发表于 10-28 09:43

    嵌入式Linux应用开发的相关资料分享

    找我要啊嘿嘿,有的都给你。第一本电子版:嵌入式Linux系统开发技术详解.基于ARM这个主要是基于ARM的小型处理器的书籍,其中介绍的就是一些linux命令和交叉
    发表于 11-05 09:19

    交叉调试器嵌入式开发的流程步骤

    嵌入式开发导语嵌入式基础概念交叉开发和自助开发嵌入式开发相关术语1.
    发表于 11-05 06:35

    嵌入式开发流程

    嵌入式开发流程一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建嵌入式开发环境及交叉编译环境,开发完成后,
    发表于 11-05 06:06

    嵌入式开发流程是怎样的?

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到
    发表于 11-08 06:24

    嵌入式开发如何实现文件编译

    嵌入式开发,由于嵌入式开发板资源有限,不能进行文件编译,因此我们都是将写好都代码在宿主机(PC)上进行调试编译好后生成二进制文件,然后通
    发表于 12-16 06:47

    怎样将OpenCV环境与交叉编译器移植到嵌入式开发平台上呢

    怎样将OpenCV环境与交叉编译器移植到嵌入式开发平台上呢?有哪些移植步骤?
    发表于 12-27 06:02

    嵌入式交叉编译环境的搭建解析

    5.1.1 嵌入式交叉编译环境的搭建 交叉编译的概念在第4章中已经详细讲述过,搭建交叉
    发表于 10-18 16:44 1次下载

    干货:嵌入式Ubuntu实践之交叉编译环境的建立

    在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文具体说明了
    发表于 08-12 10:42 928次阅读

    嵌入式开发(一):嵌入式开发新手入门

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到
    发表于 10-14 10:58 78次下载
    <b class='flag-5'>嵌入式开发</b>(一):<b class='flag-5'>嵌入式开发</b>新手入门