交叉编译--参数指定--平台指定

本篇文章关于linux开发中交叉编译时对于平台指定的技巧。

首先介绍一下交叉编译时平台相关的三个参数:

--build:编译这个库的平台

--host:编译完后这个库要运行的平台

--target:这个和交叉编译工具链有关。表示通过工具链又编译的程序要运行的平台。

举栗说明:

./configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu

这个表示我使用i686平台的linux系统来编译可以在i686平台上运行的库或者程序。

./configure --build=i686-pc-linux-gnu --host=arm

这个表示我使用i686平台的linux系统来编译能够在arm平台上上运行的库或者程序。

./configure --host=i686-pc-linux-gnu --host=arm --target=arm

这个一般是用在交叉编译工具链上的,比如arm-linux-gcc的编译,这些参数就指定我要在i686平台上编译出来一个arm-linux-gcc,它可以在arm平台上运行,用它编译出来的库或者程序还是在arm上执行。当然最常用的还是在i686平台上编译可以在i686上运行的arm-linux-gcc,然后arm-linux-gcc编译出来的库或者程序能够在arm平台上运行。

可能对于刚入门的人来说弄清楚这些平台的名字很麻烦,不清楚怎么去查看自己运行系统的平台。

有很多地方可能会说使用uname -a命令来查看,但是对于新手来说很难从这一大串信息中提取出来i686-pc-linux-gnu。

下面介绍一个利器:config.guess。这个脚本基本上在所有的库里面都有,如果你不指定--build的话在配置时configure脚本会运行config.guess来检测当前的平台。可以直接运行这个脚本查看自己当前使用的平台:

对于host怎么指定网上有着五花八门的说法:

arm

arm-linux

arm-linux-guneabi

arm-none-linux-guneabi

不负责任的总结一下:这些都对,都可以,因为它只是需要知道它是arm平台而已。上证据:

我们可以看到它匹配的是以arm开头的,当然了,为了安全起见,最好使用最后一种命名方式吧。这个是和你使用的交叉编译链同名前缀。

如果有以下情况,可以通过邮箱或者QQ联系我:

1、以上内容阐述的有错误需要修正;

2、有疑问需要和我一起探讨;

3、有无意间的侵权行为,要求删除内容的;

4、想交个朋友,或者要指点我相关技术的。

联系方式:[email protected]

猜你喜欢

转载自blog.csdn.net/qq_39063476/article/details/83450862