交叉编译时,configure参数--host作用和意义

首先看一下网上的解释 --build/--host/--target的解释:

build:执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。
 
host:编译出来的二进制程序所执行的主机,因为绝大多数是本机编译,本机执行,所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。
 
target:这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。

 意思是用host参数,告诉configure脚本,编译出来的程序要在哪个平台上面运行。但--host=xxxxx , 这一串xxxxx到底是怎么决定的,网上一般告诉你arm就是arm-linux  ,mips是mipsel-linux,具体这个arm-linux/mipsel-linux是怎么回事,为什么是这串字符串,网上也没解释。为了搞清楚真相,决定把从网上下载下来的curl-curl-7_53_0.zip 源码,做两份不同的configure ,然后对比整个文件夹有什么不同。两条命令分别如下:

1: ./configure --host=armv7a-mediatek482_001_neon-linux-gnueabi

2:./configure --host=mipsel-linux

对比两份文件夹,我们发现,最主要的变化 ,就在src目录下面的Makefile,参看如下图:

由上图我们就一目了然,--host其实就是指定编译链工具的前缀的,每个厂家根据芯片,发布自己的gcc版本,gcc/ar/strip等工具前面,都会加上厂家,芯片等前缀, configure就是根据这个--host值,找到正确的交叉工具。我上面测试的例子,为什么选择--host值为:--host=armv7a-mediatek482_001_neon-linux-gnueabi,参看下图就明白了!!

从上图可以看出configure根据--host=xxxxx 会在makefile中生成编译器CC为 xxxx-gcc,这里要说一下,configure会用一段简单的代码,去测试调用xxxx-gcc存在不存在,如果不存在,仍然会把编译器默认为CC=gcc,也就是说,如果你用了一个错误的 --host=xxxxx,configure可能不会报错,最后make时,是调用你主机的gcc编译代码,这样编译出来的程序 ,在目标系统上面是没办法运行的。因此,要指定正确的--host值 ,才能调用正确的交叉编译工具。 这个一定要注意!! 

 

 

 

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值