永远的错误,不理解的结果

交叉编译ncurses-5.8 时出错,我用的是如下的A方法进行的configure

A:

../ncurses-5.8/configure --prefix=/home/rebi/cross_tools/build_ncurses-5.8/_install --host=arm-linux CC=arm-unknown-linux-gnueabi-gcc

B:

../ncurses-5.8/configure --prefix=/home/rebi/cross_tools/build_ncurses-5.8/_install --host=arm-unknown-linux-gnueabi

对于所有的交叉编译配置,我一直是用类似于A方法配置的,但今天ncurses编失败了,用B就成功了。

看来还是没有理解host参数的真正含义!!!configure实际上也是一样脚本,只是太大了,上万行,看来只能在这里面找答案了。

configure脚本中关于--host的处理部分:

  -host | --host | --hos | --ho)    ac_prev=host_alias ;;  

-host=* | --host=* | --hos=* | --ho=*)    host_alias=$ac_optarg ;;

。。。#可见,参数被赋给host_alias了,所以继续找用到host_alias的地方,果然

ac_tool_prefix=test -n "$host_alias" && ac_tool_prefix=$host_alias-#如果变量host_alias不为空,则给它后面加上一个“-”,然后赋于ac_tool_prefix这个变量。

ac_tool_prefix又在哪用到呢?

if test -n "$ac_tool_prefix"; then 

 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.

set dummy ${ac_tool_prefix}gcc; ac_word=$2 #最终,这个ac_tool_prefix前缀会被追加到gcc的前面,于是,这样编生成了交叉编译器的名称,其它的如ar、strip、cc、as、objdump、ranlib也一样。

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5

 

到这里,云开见日。

可见用方法A,手动指定CC=xxx的形式只是改了CC一个,但其它的如ld、ar等没有被一并修改,但通过--host参数会修改所有的与交叉编译相关的东西,所以这应该是问题的关键所在。

看来这里的host实际上是就是决定了编译器的前缀。

It is a long long way to go...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值