arm平台交叉编译器安装

1准备源码包

1.1 binutils-2.22

GNU binutils是一组二进制工具集

1.2  gcc-4.7.2

1.3 gmp-5.0.5

GMP是一个免费的库,用于任意精度的算术运算,操作有符号整数、有理数和浮点数。除了在GMP机器上运行的可用内存所暗示的精度外,对精度没有实际的限制。GMP具有丰富的功能集合,功能之间有规则的接口。

GMP的主要目标应用是密码学应用和研究、互联网安全应用、代数系统、计算代数研究等。

1.4 mpfr-3.1.1

MPFR库是一个用于具有正确舍入的多精度浮点计算的C库。MPFR一直得到INRIA的支持,目前的主要作者分别来自法国洛里亚(Nancy)和法国里昂(Lyon)的Caramba和AriC项目团队;详情请见信用页面。MPFR是基于GMP多精度库。

MPFR的主要目标是为多精度浮点计算提供一个库,它既高效又具有良好定义的语义。它复制了ANSI/IEEE-754标准中关于双精度浮点运算(53位有效)的好思想。

1.5mpc-1.0.1

GNU MPC是一个C库,用于计算任意精度的复数和结果的正确舍入。它将IEEE-754标准的固定精度实数浮点数的原则扩展到复数,为每个操作提供定义良好的语义。


1.6 glibc-2.16.0

1.7 glibc-linuxthreads-2.5

1.8 glibc-ports-2.16.0

1.9一份内核源码

内核源码我使用的是linux.3.10

为了方便,把这些源码包都放在这个链接下面:

2 设置环境变量

export TARGET=arm-linux-gnueabi
export PREFIX=/home/lu/tool_chain/cross/gcc-4.7.2/$TARGET

export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH

编译下面的软件的时候,要严格按照顺序来编译,不然会报错。上面的TARGET是不能随便改的,只有有限的几种可以选择,不然后面会出现莫名其妙的错误。

3. 编译binutils

tar -xzf binutils-2.22.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX
make -j2
make install

4 第一次编译gcc(不带glibc支持)

4.1 安装gmp

先安装gmp-5.0.4.tar.bz2

进入gmp目录:cd gmp-5.0.4

建立编译路径: mkdir gmp_install

cd gmp_install

../configure --prefix=/home/lu/tool_chain/cross/gcc-4.7.2/gmp

make

make install

编译gmp的时候,如果出现如下错误:
checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).

可以在ubunt软件中心安装m4

4.2 安装mpfr

cd mpfr-3.1.0

建立编译路径: mkdir mpfr_install

cd mpfr_install

../configure --prefix=/home/lu/tool_chain/cross/gcc-4.7.2/mpfr --with-gmp=/home/lu/tool_chain/cross/gcc-4.7.2/gmp

make

make install

4.3 安装mpc

进入mpc

建立编译路径: mkdir mpc_install

cd mpc_install

../configure --prefix=/home/lu/tool_chain/cross/gcc-4.7.2/mpc --with-gmp=/home/lu/tool_chain/cross/gcc-4.7.2/gmp  --with-mpfr=/home/lu/tool_chain/cross/gcc-4.7.2/mpfr

make

make install

4.4 最后编译gcc

编译gcc的时候,一定需要注意的是,不要在源码目录下面直接编译,不然可能会出现各种莫名其妙的错误。

cd gcc-4.7.2

mkdir build

cd build

../configure --prefix=$PREFIX --target=$TARGET --without-headers --enable-languages=c --disable-threads --with-newlib --disable-shared --disable-libmudflap --disable-libssp --disable-decimal-float --with-gmp=/home/lu/tool_chain/cross/gcc-4.7.2/gmp --with-mpfr=/home/lu/tool_chain/cross/gcc-4.7.2/mpfr --with-mpc=/home/lu/tool_chain/cross/gcc-4.7.2/mpc

make all-gcc -j4

make install-gcc

make all-target-libgcc -j4

make install-target-libgcc

如果make all-target-libgcc -j4出现如下错误
../../../libgcc/libgcc2.c:149:1: internal compiler error: Segmentation fault
解决:

修改gcc/ira-int.h文件:

static inline bool
ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
                  ira_object_t *o)
{
  *o = ALLOCNO_OBJECT (a, i->n);
  return i->n++ < ALLOCNO_NUM_OBJECTS (a);
}

修改为

static inline bool
ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
                  ira_object_t *o)
{
    int n = i->n++;
    if (n < ALLOCNO_NUM_OBJECTS (a))
    {
        *o = ALLOCNO_OBJECT (a, n);
        return true;
    }
    return false;
}

5 安装内核头文件

tar -xjf linux-3.10.tar.bz2
cd linux-3.10
make ARCH=arm headers_check
make ARCH=arm INSTALL_HDR_PATH=dest headers_install
sudo cp -rv dest/include/* $PREFIX/$TARGET/include
注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIX

6 编译c库

tar -xf glibc-2.16.0.tar.xz
tar -xjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0
tar -xf glibc-ports-2.16.0.tar.xz
mv glibc-ports-2.16.0 glibc-2.16.0/ports
mkdir glibc-build
cd glibc-build
CC=$TARGET-gcc

ln -s /home/lu/tool_chain/cross/gcc-4.7.2/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/4.7.2/libgcc.a /home/lu/tool_chain/cross/gcc-4.7.2/arm-linux-gnueabi/lib/gcc/arm-linux-gnueabi/4.7.2/libgcc_eh.a

../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --with-tls --disable-profile --with-binutils=$PREFIX/bin --with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_arm_tls=yes

make all -j4

make install


如果build的时候遇到如下错误:
scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class -- [], [^] or [)

需要安装gawk

apt-get install gawk

7 编译完整的gcc

把上面的CC变量设置为

export CC=gcc

../configure --host=$TARGET --prefix=$PREFIX --target=$TARGET --enable-shared --enable-languages=c --disable-sjlj-exceptions --with-gmp=/home/lu/tool_chain/cross/gcc-4.7.2/gmp --with-
mpfr=/home/lu/tool_chain/cross/gcc-4.7.2/mpfr --with-mpc=/home/lu/tool_chain/cross/gcc-4.7.2/mpc

make -j2

sudo make install

本文主要参考下面两篇文章:

https://blog.csdn.net/linuxarmsummary/article/details/8545968

https://blog.csdn.net/poxiaozi6264/article/details/8041160

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值