[心得]cross toolchain的組態參數host, build, …
如果我們在設定組態binutils & gcc & glibc要編譯cross toolchain時
會遇到設定build, host, target這3個參數。
這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猜得符不符合上述的規則。
(有錯歡迎指正)
--
Albert Einstein :
If there is any religion that could cope with modern scientific needs it
would be Buddhism.
《金剛經》一切有為法 如夢幻泡影 如露亦如電 應作如是觀
http://web.cc.ncu.edu.tw/~93501025/jg.doc
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.200.121
※ 編輯: zxvc 來自: 140.115.200.121 (04/27 12:28)
※ 編輯: zxvc 來自: 140.115.200.121 (04/27 12:29)
推
04/28 12:33, , 1F
04/28 12:33, 1F
推
04/29 14:05, , 2F
04/29 14:05, 2F
→
04/29 14:06, , 3F
04/29 14:06, 3F
推
01/25 23:37, , 4F
01/25 23:37, 4F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章