Cross ToolChain的組態參數 host, build, target
如果我們在設定組態binutils & gcc
& glibc要編譯cross toolchain時會遇到設定build, host, target這3個參數。
這3個參數在編每個程式的意義不太一樣,而且設定正確是很重要的。
假設我們想在一台x86的電腦上想建一個cross
toolchain for ARM,也就是這個cross toolchain可以在x86機器上編譯程式,然後把這程式下載到ARM機器上執行。
build 這個參數最好懂,它指的是你編譯toolchain這些程式所在的環境。
因為我們編binutils, gcc and
glibc都是在x86上編譯,所以這個參數只要設定成x86的組態就可以了。
例如: --build=i686-pc-linux-gnu
target 這個參數是指你的compiler或binutils要產生某種機器(如ARM)的程式所下的參數。
host 這個參數是指要被編譯的程式是要在host機器上執行的。
例如,當我們在編譯cross binutils時,我們希望GNU Assembler能 assemble ARM instructions 成
ARM machine code,所以target就要設定成ARM的組態。
而我們的cross
binutils(例如:arm-unknown-linux-gnu-as,arm-unknown-linux-gnu-ld,
arm-unknown-linux-gnu-ranlib) 是在x86上執行的程式,所以host必須設定成x86的組態。
也就是:--target=arm-unknown-linux-gnu --host=i686-pc-linux-gnu
在編譯cross gcc時,我們希望GNU GCC能把我們的C source compile 成 ARM
instructions,所以target就要設定成ARM的組態。
而我們的cross
gcc(例如:arm-unknown-linux-gnu-gcc,arm-unknown-linux-gnu-g++)
是在x86上執行的程式,所以host必須設定成x86的組態。
也就是:--target=arm-unknown-linux-gnu
--host=i686-pc-linux-gnu
在編譯glibc for
ARM時,並沒有提供target選項,因為這個選項對glibc似乎沒有意義。
我們希望我們的glibc for
ARM是一支能夠在ARM機器上執行的『程式』
(注意:函式庫本身就是一種程式),所以我們 host 要設定成 ARM 的組態。
也就是:--host=arm-unknown-linux-gnu
不過也不是所有的選項都要設定,有些選項可以讓configure自己去猜。
只是你可以稍微注意一下configure猜得符不符合上述的規則。
具體解釋一下,
build 就是你正在使用的機器,
host 就是你編譯好的程序可以運行的平台,
target 就是你編譯的程序可以處理的平台.
這個 build和host比較好理解,但是target就不好辦了,到底什麼意思呢?
一般來說,我們平時所說的交差編譯用不到他
target 的,比如. /configure --build=i386-linux,--host=arm-linux就可以了。
在386的平台上編譯可以運行在arm板的程序.但是,一般我們都是編譯程序,而不是編譯工具,如果我們編譯工具,比如gcc,這個target就有用了。
如果我們需要在一個我們的機器上為arm開發板編譯一個可以處理 mips程序的gcc,那麼target就是mips了。
不知道我的解釋是否正確如果我們需要在一個我們的機器上為arm開發板編譯一個可以處理
mips程序的gcc,那麼target就是mips了.不知道我的解釋是否正確??
沒有留言:
張貼留言