作者zxvc (zxvc)
看板LinuxDev
标题[心得]cross toolchain的组态参数host, build, target
时间Fri Apr 27 12:27:05 2007
如果我们在设定组态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)
1F:推 dozer:推 04/28 12:33
2F:推 jeunder:这真是个疲劳的过程. 上次失败n次就放弃了. 改天再试试. 04/29 14:05
3F:→ jeunder:有问题再请教你... 04/29 14:06
4F:推 robinliao:感谢,收获很多! 01/25 23:37