交叉編譯場景分析(arm-linux)--序

李先靜發表於2020-04-06

交叉編譯場景分析(arm-linux)--

 

去年花了一個多月時間,為arm-linux平臺編譯程式庫,其中包括zlibreadlinencursestslibTinyXlibpngjpegcairopangoglibatkgtk+match系列、SCIMGPE系列。由於之前沒有經驗,走了不少彎路,雖然從中學到了一些知識,大部分時間都浪費了。最近一些同事和朋友常問我一些關於交叉編譯的問題,我想有必要總結一下,和大家分享一些心得。

 

什麼是交叉編譯呢?在回答這個問題前,我們先解釋兩個概念:

 

  機:執行編譯過程的計算機。

目標機:執行編譯結果(可執行檔案)的計算機。

 

一般情況下,主機和目標機是同一型別的計算機,這就是正常的編譯,沒有什麼好說的。所謂交叉編譯就是在主機上為目標機編譯,比如在PC上編譯,然後在手機上執行,這種編譯就叫交叉編譯。

 

交叉編譯需要交叉編譯器,不同的目標機(主要是看晶片型別)需要不同的交叉編譯器,比如我們這裡要介紹的arm-linux交叉編譯,所用的交叉編譯器就是arm-linux-gcc系列。

 

構建一個交叉編譯器(toolchain),說簡單也簡單,說複雜也複雜。原理上很簡單,實際情況常常比較複雜,原因是編譯器一直處於開發狀態,你要了解某個版本的穩定性,要去找patch。有時候還要看你的運氣好不好,折騰一個星期才搞定也是很常見的。

 

網上已經有不少已經構建好了的交叉編譯器(toolchain),除非你想了解如何構建交叉編譯器,否則直接下載一個來用是比較明智的做法。這裡不打算介紹如何構建交叉編譯器的知識。

 

在做交叉編譯前,你最好了解autoconf系統工具的用法,遇到問題時,可以快速定位。先找一本autoconf的書看看,可以說是磨刀不識砍柴功,否則後面會浪費更多的時間。

 

 

相關文章