本篇文章关于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、想交个朋友,或者要指点我相关技术的。
联系方式:158153679@qq.com