花了点时间,编译了一次gcc-linaro-4.8-2013.12

第一次编译,是参考别人写的内容,有帮助,但还是要自已处理一些错误,其中有些错误,因为自已对GCC的组成不熟悉在定位错误时花了不少时间。最初要编译它是因为在编译libmad时遇到了thumb指令错误,但这个用codesoucery编译就没问题。所以认为出现编译软件上,但实际上是codesoucery过旧了,没有针对新的ARM处理器做编译参数优化。linaro在优化上做的比较好。其实thumb指令错误,改libmad的源码可以解决。

首先,要下载源码包,在ubuntu下开IPV6开代理,如下方式下载的会快一点。墙会时不时卡断数据传送,断点传送保证可以接收完全的数据包。版本相当多,因为我编译中遇到了一些自已不太明白的错误,最后先了一个打包好的比较旧的版本,这个版本与我所用的旧手机测试硬件也是相配的。

wget -c --no-check-certificate -e "https_proxy=http://127.0.0.1:8087" https://releases.linaro.org/archive/13.12/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src.tar.bz2

1,关于sysroot。由glibc与kernel headers组成的sysroot,可自已编译,但用下载的源码包中的就好。

2,编译gcc时,需要注意一个原则:不要再gcc的源码中直接执行./configure、make、make install等命令,需要在源码目录下另外新建一个目录,在新建的目录中执行以上命令。

其它还有一些配置的细节,不多说给出我的编译脚本。

1-gmp-gnu.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=gmp-5.0.2
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$ME.tar.bz2
#cd $PROJECT_BASE/build && tar -jxvf $REPOSITORY/$ME.tar.bz2
cd $PROJECT_BASE/build/$ME

./configure  --prefix=$PREFIX

make
make install
#make && make install

2-mpfr-gnu.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=mpfr-3.1.0
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$ME.tar.bz2
#cd $PROJECT_BASE/build && xz -d $REPOSITORY/$ME.tar.xz && tar -xvf $REPOSITORY/$ME.tar
#cd $PROJECT_BASE/build && tar -jxvf $REPOSITORY/$ME.tar.bz2
cd $PROJECT_BASE/build && tar -xvf $REPOSITORY/$ME.t
cd $PROJECT_BASE/build/$ME

./configure  --prefix=$PREFIX --with-gmp=$PREFIX

make
make install
#make && make install

3-mpc-gnu.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=mpc-0.9
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
cd $PROJECT_BASE/build && tar -zxvf $REPOSITORY/$ME.tar.gz
cd $PROJECT_BASE/build/$ME

./configure  --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX

make
make install
#make && make install

4-isl.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=isl-0.11.1
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget http://isl.gforge.inria.fr/isl-0.12.tar.gz
cd $PROJECT_BASE/build && tar -jxvf $REPOSITORY/$ME.tar.bz2
cd $PROJECT_BASE/build/$ME

#./configure  --prefix=$PREFIX/isl --with-gmp-prefix=$PREFIX
./configure  --prefix=$PREFIX --with-gmp-prefix=$PREFIX

make
make install
#make && make install

5-cloog.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=cloog-0.18.0
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget http://www.bastoul.net/cloog/pages/download/cloog-0.18.1.tar.gz
cd $PROJECT_BASE/build && tar -zxvf $REPOSITORY/$ME.tar.gz
cd $PROJECT_BASE/build/$ME

./configure  --prefix=$PREFIX --with-gmp-prefix=$PREFIX

sed -i 's/UNKNOWN/isl-0.11/g' ./isl/gitversion.h

make
make install
#make && make install

6-binutils.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=binutils-linaro-2.24-2013.12
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget http://releases.linaro.org/archive/13.12/components/toolchain/binutils-linaro/binutils-linaro-2.24-2013.12.tar.xz
#cd $PROJECT_BASE/build && xz -d $REPOSITORY/$ME.tar.xz && tar -xvf $REPOSITORY/$ME.tar
#cd $PROJECT_BASE/build && tar -xvf $REPOSITORY/$ME.tar
cd $PROJECT_BASE/build/$ME

#isl 找到新版本问题。
#sed -i 's/if (strncmp (isl_version (), "isl-0.10", strlen ("isl-0.10")) != 0)/if (strncmp (isl_version (), "isl-0.12", #strlen ("isl-0.12")) != 0)/g' ./configure 
#sed -i 's/version 0.10/version 0.12/g' ./configure 

./configure --prefix=$PREFIX \
--with-sysroot=$PREFIX/sysroot \
--target=arm-linux-gnueabihf \
--with-gmp=$PREFIX \
--with-isl=$PREFIX  \
--with-mpfr=$PREFIX \
--with-mpc=$PREFIX

#--with-sysroot=$PREFIX/libc \
#--build=x86_64-linux-gnu \
#--host=x86_64-linux-gnu \

make
make install
#make && make install

7-sysroot.sh

#/bin/bash
PROJECT_BASE=$(pwd);
ME=linaro-prebuilt-sysroot-2013.10
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $PROJECT_BASE/build && xz -d $REPOSITORY/$ME.tar.xz && tar -xvf $REPOSITORY/$ME.tar
#cd $PROJECT_BASE/build && tar -xvf $REPOSITORY/$ME.tar

cd $PREFIX && tar -jxvf $REPOSITORY/linaro-prebuilt-sysroot-2013.10.tar.bz2
mv linaro-prebuilt-sysroot-2013.10 sysroot

8-gcc-linaro.sh

#/bin/bash
PROJECT_BASE=$(pwd);
#ME=gcc-linaro-4.8-2014.04
ME=gcc-linaro-4.8-2013.12
#REPOSITORY=$PROJECT_BASE/download
REPOSITORY=$PROJECT_BASE/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_src
PREFIX=$PROJECT_BASE/PREFIX

#cd $REPOSITORY && wget http://releases.linaro.org/archive/13.12/components/toolchain/binutils-linaro/gcc-linaro-4.8-2013.12.tar.xz
#cd $PROJECT_BASE/build && xz -d $REPOSITORY/$ME.tar.xz && tar -xvf $REPOSITORY/$ME.tar
#cd $PROJECT_BASE/build && tar -xvf $REPOSITORY/$ME.tar
cd $PROJECT_BASE/build/$ME

mkdir build
cd  ./build

#export PREFIX=/media/ququ/android/gcc-arm-linaro/gcc-my/PREFIX
export CXXFLAGS="-std=gnu++11"
export LD_LIBRARY_PATH=$PREFIX/lib
#libgcc.mvars: No such file or directory make[2]:
#编译gcc时,需要注意一个原则:不要再gcc的源码中直接执行./configure、make、make install等命令,需要在源码目录下另外新建一个目录,在新建的目录中执行以上命令。
../configure \
--prefix=$PREFIX \
--build=x86_64-linux-gnu \
--host=x86_64-linux-gnu \
--target=arm-linux-gnueabihf \
--with-gmp=$PREFIX \
--with-mpfr=$PREFIX \
--with-mpc=$PREFIX \
--with-isl=$PREFIX \
--with-cloog=$PREFIX \
--enable-languages=c,c++,fortran \
--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 \
--with-sysroot=$PREFIX/sysroot \
--with-local-prefix=$PREFIX/sysroot

#--with-libelf=$PREFIX \
#--with-arch=armv5te \

make

make install
#make && make install

大多时下载编译好的就好。但没事编一下也能理解一下gcc的编成。软件包中还有一些没用到。有的是没用的工具,有些可能已通过ubuntu系统安装了。

测的话,hello代码,用静态编译在android 的adb shell下正常。要动态库的话,就需要切换chroot了,这个就是root手机并安装ubuntu的方法,比较简单的。

猜你喜欢

转载自blog.csdn.net/qushaobo/article/details/86661386
今日推荐