交叉編譯器理解

2021-08-18 00:15:39 字數 1198 閱讀 8275

交叉編譯器理解

交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。

我們常用的計算機軟體,都需要通過編譯的方式,把使用高階計算機語言編寫的**(比如c**)編譯(compile)成計算機可以識別和執行的二進位制**。

本地編譯:我們在windows平台上,可使用visual c++開發環境,編寫程式並編譯成可執行程式。

交叉編譯:交叉編譯可以理解為,在當前編譯平台下,編譯出來的程式能執行在體系結構不同的另一種目標平台上,但是編譯平台本身卻不能執行該程式:

比如,我們在 x86 平台上,編寫程式並編譯成能執行在 arm 平台的程式,編譯得到的程式在 x86 平台上是不能執行的,必須放到 arm 平台上才能執行。

為什麼會有交叉編譯器?

在進行嵌入式系統的開發時,執行程式的目標平台通常具有有限的儲存空間和運算能力,比如常見的 arm 平台,其一般的ram大概是16到64mb,而cpu的主頻大概在100mhz到500mhz之間。這種情況下,在arm平台上進行本機編譯就不太可能了,這是因為一般的編譯工具鏈(compilation tool chain)需要很大的儲存空間,並需要很強的cpu運算能力。另外,在arm上的作業系統跑起來之前,我們需要在其他平台上編譯乙個可以在arm平台上執行的作業系統。

交叉編譯鏈:

交叉編譯鏈就是為了編譯跨平台體系結構的程式**而形成的由多個子工具構成的一套完整的工具集。同時,它隱藏了預處理、編譯、彙編、鏈結等細節,當我們指定了原始檔(.c)時,它會自動按照編譯流程呼叫不同的子工具,自動生成最終的二進位制程式映像(.bin)。

gnu工具鏈中包括編譯器(cc)、聯結器(ld)、彙編器(as)以及偵錯程式(gdb),

c執行庫:(如glibc,uclibc)c函式庫構成linux核心之上的乙個薄層並提供了許多有用的例程,如果這些例程都由linux核心自身來提供,付出的代

價將相當昂貴(根據**效率和增加的複雜性)。事實上,當你要求gcc執行編譯,鏈結生成可執行程式時,gcc會預設

將這些c函式庫鏈結進可執行程式中。由於這一過程發生在連線階段,所以還需要你在應用程式源**中新增函式庫的頭

檔案以提供庫函式自身的原型定義,如include 等

命名規則:

arch-core-kernel-system

交叉編譯器

交叉編譯器可以使我們在主機上編譯出可以在嵌入式裝置上執行的程式 install gcc aarch64 linux gnu 安裝64位用於作業系統的交叉編譯器,gcc版本是5.4,安裝位置在 usr bin sudo apt get install gcc arm linux gnueabihf 安...

ubuntu安裝交叉編譯器 安裝交叉編譯器

2 安裝方法二 1 安裝方法一 開啟ubuntu終端 使用sudo apt list gcc arm 可以檢視所有的交叉編譯器,假設安裝gcc arm linux gnueabihf,則使用sudo apt get install gcc arm linux gnueabihf就裝好了。參考 2 安...

arm linux交叉編譯器

本文出自 http embdev.gotdns.org 版本選者在linux裡面是非常重要的,沒有windows一樣有效的管理,建議選者文中的版本。否則出現錯誤的概率很高,所有的版本區別請參考各位庫的官方主頁。雖然網上有現成的工具,但是,一步步的製作下來可以讓新手理解一下linux各個庫的關係,以及...