<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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 指默認編譯參數支持硬件浮點功能)等

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5002

    文章

    18414

    瀏覽量

    291551
  • Linux
    +關注

    關注

    87

    文章

    11022

    瀏覽量

    207059
  • 操作系統
    +關注

    關注

    37

    文章

    6363

    瀏覽量

    122128
  • 交叉編譯
    +關注

    關注

    0

    文章

    31

    瀏覽量

    12579

原文標題:什么是交叉編譯?為什么需要交叉編譯?

文章出處:【微信號:嵌入式攻城獅,微信公眾號:嵌入式攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式開發入門之旅

      課程目標:本次免費體驗課程將按照嵌入式開發設計的流程,從嵌入式開發基本概念、嵌入式項目流程詳解、嵌入式ARM處理器
    發表于 07-09 16:57

    嵌入式開發入門之旅

    種類、嵌入式Linux在嵌入式產品的應用、如何將Linux安裝到開發板上4.  我也來編譯Linux操作系統
    發表于 07-10 15:59

    嵌入式學習路線 嵌入式學習路線詳解

    ,創客學院嵌入式開發講師整理了最全最短的嵌入式學習路線途徑,希望可以對讀者們有所幫助?! ?b class='flag-5'>嵌入式學習路線 嵌入式學習路線詳解:  1、Lin
    發表于 03-17 18:05

    ARM嵌入式Linux系統開發詳解

    大量讀者好評的“Linux典藏大系”的《ARM嵌入式Linux系統開發詳解》的第2版?!禠inux典藏大系: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 ?948次閱讀

    嵌入式開發(一):嵌入式開發新手入門

    嵌入式開發環境及交叉編譯環境,開發完成后,編譯得到bin文件,然后在Windows下將bin文件通過串口或網絡下發到
    發表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開發</b>(一):<b class='flag-5'>嵌入式開發</b>新手入門
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>