交叉編譯 新手入門交叉編譯 交叉編譯碎碎念

2021-10-16 02:13:35 字數 1064 閱讀 8026

這是乙個新手入門入門交叉編譯的小白貼,分為三個部分,第一部分直觀介紹不同的計算機平台之間的可執行檔案不互通,第二部分介紹交叉編譯解決不同平台軟體編譯時間問題,第三部分介紹x86 linux下編譯arm linux的編譯器arm linux gcc相關知識。

我們知道計算機有不同的架構:如經常聽到的x86,這是大多數pc的平台;也有用在嵌入式裝置裡的arm平台;還有ibm的powerpc架構。為什麼會有不同的架構呢?主要是不同架構解決了不同的問題,一般來說,x86架構的效能比較強悍,而arm架構可能更加適合低功耗。(一句話總結,計算機架構不同是有歷史原因的。)

不同架構之間存在乙個明顯差異,就是可執行檔案不一定互通。意識就是x86架構下的可執行檔案(二進位制),到了arm架構下,大約是不能直接執行的。簡單舉個例子,安卓應用不能直接跑在iphone上。我們都知道,二進位制可執行檔案都是由**編譯而來的,這裡的**就是程式設計師說的helloworld。同乙份**要在不同的平台上跑起來,是要通過不同的編譯流程的。在這個編譯流程中,最核心的就是編譯器。

具體而言,在linux x86平台上,有編譯linux x86的編譯器,如gcc。而在linux arm平台上,有編譯arm的編譯器。這兩個編譯器編譯同乙份**,都能在自己對應的平台上執行。如果拿到對方平台,就會有極大可能是跑不起來的。

不同平台編譯出軟體不互通,這是十分符合直覺思維的事情,看起來也沒有什麼問題。但是,當我們從新思考編譯這一件事情的時候,我們就會發現,編譯並不是簡單輕鬆的事情,它是很消耗資源的。而這些資源,一定是對應平台所能夠提供的。可以看到在樹莓派上編譯tensorflow大約編譯到地老天荒。

所以有沒有解決辦法呢?交叉編譯橫空出世了。一種很直觀的理解就是,x86平台硬體資源很好,有大記憶體,好的cpu,大容量的儲存,我在x86平台上編譯乙個能夠在arm平台上執行的可執行檔案。而x86平台上編譯出來的這個可執行檔案,反而不能在x86平台上跑。

請參考:

arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別​www.veryarm.com

交叉編譯(2) 交叉編譯鏈

什麼是交叉編譯鏈 明白了什麼是交叉編譯,那我們來看看什麼是交叉編譯鏈。首先編譯過程是按照不同的子功能,依照先後順序組成的乙個複雜的流程,如下圖 那麼編譯過程包括了預處理 編譯 彙編 鏈結等功能。既然有不同的子功能,那每個子功能都是乙個單獨的工具來實現,它們合在一起形成了乙個完整的工具集。同時編譯過程...

編譯 交叉編譯

交叉編譯含義 是指在乙個平台上生成另乙個平台上的可執行 同乙個體系結構可以執行不同的作業系統,同樣乙個作業系統也可以在不同的體系結構上執行 例 常說的x86 linux平台 指inter x86體系結構及linux for x86作業系統 x86 winnt平台 指inter x86體系結構及win...

交叉編譯 Go 交叉編譯 跨平台編譯

golang 支援交叉編譯,在乙個平台上生成另乙個平台的可執行程式 cgo enabled 0 goos linux goarch amd64 go build main.go cgo enabled 0 goos windows goarch amd64 go build main.go cgo ...