build、host和targetlinux
在交叉編譯中比較常見的一些參數就是build、host和target了,正確的理解這三者的含義對於交叉編譯是很是重要的,下面就此進行解釋
--build=編譯該軟件所使用的平臺
--host=該軟件將運行的平臺
--target=該軟件所處理的目標平臺
咱們以 gcc 爲例子來 講解 這三者的做用
在gcc編譯中咱們使用
./configure --build=編譯平臺 --host=運行平臺 --target=目標平臺 [各類編譯參數]
來配置gcc的源代碼,以讓其編譯出咱們須要的gcc編譯器。
那麼在這組配置參數中:
--build:
表示目前咱們正在運行的平臺名稱是什麼,若是當前咱們是在intel的pentium機器中編譯該系統,那麼咱們的--build就多是 i686-pc-linux-gnu,固然若是咱們在其它種類的機器上編譯那麼這個build就應該是那個機器所對應的平臺名稱。
該參數在不指定的狀況下將自動嘗試猜想目前平臺的名稱。
--host:
表示咱們把這個編譯好的gcc在什麼樣的平臺下運行,在交叉編譯過程當中這個須要咱們來指定,由於機器本身是不能知道咱們內心是怎麼想的,那 麼咱們能夠明確的告訴它,咱們要作出來的程序是運行在「龍芯」上的,可是目前還不能直接指定「龍芯」,所以咱們這裏指定爲mips64el- unknown-linux-gnu(若是你省點事情那麼就用這個名字好了,若是你想用個有個性的名字,那麼請你想明白它的含義再動手,而且作好後面的過 程須要多出一些手續的麻煩的心理準備)。
--host也能夠不指定,那麼host將自動使用build來定義本身,不過那將再也不是交叉編譯。
注:--build和--host在不一樣的時候就被配置文件認定爲交叉編譯方式。 --target: 該參數的目的是讓配置程序知道這個軟件被編譯後使用來處理什麼平臺上的文件的。 target這個參數只有在爲數很少的幾個包中有用處,雖然在./configure --help中常常能看到該參數,但實際上絕大多數軟件包都是不須要該參數的。 從這個參數的含義來看,說明其處理的目標只有在不一樣平臺下表現爲不一樣的時候纔有做用,而這些文件一般都跟目標平臺 的指令系統直接或間接有關:好比可執行文件,對於不一樣平臺下使用的可執行文件的編碼能夠是徹底不一樣的,所以必須使用 對應能處理該編碼的程序才能正確處理,而若是錯誤的使用則可能致使程序錯誤或者破壞文件,對於這樣要處理不一樣平臺下會 出現不一樣編碼的軟件,咱們就應當對它指定目標平臺,以避免另其錯誤處理;而對於文本文件,對於不一樣的平臺一樣的內容表達的 含義都是相同的,所以咱們不須要專門針對平臺來處理,這樣的軟件咱們就能夠沒必要對它指定須要處理的平臺了。 咱們來總結一下: build:自動測試在用平臺名稱,若沒法檢測出來則須要指定。 host:若無指定,自動使用build的結果。 build和host相同時表示本地編譯,若不相同則表示交叉編譯。 target:表示須要處理的目標平臺名稱,若無指定使用host相同名稱,gcc、binutils等於平臺指令相關軟件有此參數,多數軟件此參數無用處。 綜合的例子: 咱們須要在x86下編譯一個運行於arm上的編譯器gcc,這個gcc產生mips平臺的目標代碼。那麼咱們的配置方式是: --build=x86 --host=arm --target=mips (僅是示意,方便理解,具體寫法請google)