[心得]cross toolchain的組態參數host, build, …

看板LinuxDev作者 (zxvc)時間17年前 (2007/04/27 12:27), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串1/1
如果我們在設定組態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
這真是個疲勞的過程. 上次失敗n次就放棄了. 改天再試試.
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
文章代碼(AID): #16CNkSQG (LinuxDev)