交叉编译时,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值 ,才能调用正确的交叉编译工具。 这个一定要注意!! 

 

 

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>