"交叉"编译arm版linaro-1.13.1-4.7-2013.03

        肯定有人要说,你是不是闲得,编个arm版本的干什么,官方已经发出了linux、win版本了! 是的,官方的确有这些版本,但是没有arm版,更高版本的linaro好像都带的有arm版了。但是,好像还是没说明白我为什么要编译个arm版,是这样,我有很多事情想要在arm环境上编译测试,如果有了一个arm版就会更方便。至于哪些事就不必细扯了,只是做个记录而已。 至于其它版本,yocto环境应该有相应的arm版本,官网release可能也有,用cross-ng编译可能会更合适;但是,像我这样手工编译也是可以的。

        这第一步,当然是要从linaro官网上下载下来源码,下载下来之后,解压出来,里面有好多压缩包,但是,只有几个是必须的,它们分别是:precise-sysroot, gmp, mpfr, mpc, gcc。

        precise-sysroot: 解出来有个libc目录,这个时候,去找到你的目标kernel版本的头文件include目录,将其复制到libc/usr下即可。

我个人习惯编译每个源码时都在其目录中建立一个build目录,当然,你也可以在其它地方建,也可以不建

         编译gmp:

../configure --prefix=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr --enable-cxx --disable-static --host=arm-linux-gnueabihf

这里--prefix只是我想要把这些库都安装在这里,这是我的目标rootfs, 其它地方设置的目的也是一样。然后就make好了,成功后make install即可

编译mpfr:

../configure --prefix=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr  --disable-static --enable-thread-safe --host=arm-linux-gnueabihf --with-sysroot=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/ --with-gmp-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include/ --with-gmp-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/lib

其实这个里面的--with-gmp-include和--with-gmp-lib两个可以合并为一个--with-gmp,其它不用解释

编译mpc:

../configure --prefix=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr --disable-static --host=arm-linux-gnueabihf --with-gmp-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include/ --with-gmp-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/lib --with-mpfr-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include --with-mpfr-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/lib

这些参数都没啥好解释的,一般这三个库都比较顺利,不顺利的是后面的gcc,或多或少都会有些问题,因为这个代码是2013年的,毕竟是有些老旧了,而我们的host环境很多东西都更新了,未必都能兼容到,所以可能会遇到一些问题(说实话,我也是折腾了好久,无尽的坑,最终还是能过换一个host环境避免了无尽的折腾,我在slackware-current一直没搞完,后来索性切到ubuntu-17.04问题就少些了), 遇到问题太多的话建议也跟我一样,换个host环境试试:退一步海阔天空!

编译gcc: 使用arm-linux-gnueabihf-gcc -v可以查看交叉版本的编译选项,就照着那个改一个自己的好了:

../configure --prefix=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr --host=arm-linux-gnueabihf --with-build-sysroot=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/ --with-gmp-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include/ --with-gmp-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/lib --with-mpfr-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include --with-mpfr-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/lib --with-mpc-include=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/include --with-mpc-lib=/mnt/THData3/Work/utils_scripts/work/dvr/targetfs/usr/lib --enable-languages=c,c++ --disable-bootstrap --target=arm-linux-gnueabihf --with-sysroot=/mnt/THData2/GPLSRCS/Dev/linaro/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_src/libc --enable-multilib --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=soft   --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp

如果顺利的话,等较长一段时间就OK了。接下来当然是make install了。

到这里,还没完,的确我们是编译出一个arm版的gcc了,是不是很爽,但是,还有一点点小瑕疵,将这个目标targetfs有目标版上跑起来,弄个简单的test.c编一下试试?

#include <stdio.h>

int main(){ return 0; }

居然编译不过,报找不到stdio.h,这肯定不是你想要的,那么原因很简单,因为gcc编译的时候默认的include路径就是--prefix相关的,简单的办法,就是以上编译重新在arm环境下再编译一遍,这次问题就简单了:

export CPLUS_INCLUDE_PATH=/usr/include
export C_INCLUDE_PATH=/usr/include
其实,不重新编译也是可以的,把以上两行加到/etc/profile里面就可以,追求完美的人就重新编译一次吧:

gmp: ../configure --enable-cxx --disable-static --prefix=/usr --build=arm-linux-gnueabihf && make && make install

mpfr:  ../configure  --prefix=/usr --build=arm-linux-gnueabihf --disable-static --enable-thread-safe && make && make install

mpc:  ../configure  --prefix=/usr --build=arm-linux-gnueabihf --disable-static && make && make install

gcc:  ../configure --prefix=/usr --build=arm-linux-gnueabihf --enable-languages=c,c++ --enable-multilib --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --enable-c99 --enable-long-long --with-mode=thumb && make && make install

完成之后即万事大吉了!

(不过,在arm下编译gcc需要很长时间哦,我在cortex-A15 单核环境下,使能了c/c++/fortran三种语言,make用了7个小时,)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值