ARM平台交叉编译器的制作
主机环境:
Ubuntu 12.04.1 64bit
gcc version 4.6.3
ubuntu 12.04.1 64bit gcc version 4.6.31. 下载最新源码包
binutils-2.22.tar.gz
gcc-4.7.2.tar.bz2
gmp-5.0.5.tar.xz
mpfr-3.1.1.tar.xz
mpc-1.0.1.tar.gz
glibc-2.16.0.tar.xz
glibc-linuxthreads-2.5.tar.bz2
glibc-ports-2.16.0.tar.xz
linux-3.5.4.tar.bz2
binutils-2.22.tar.gz gcc-4.7.2.tar.bz2 gmp-5.0.5.tar.xz mpfr-3.1.1.tar.xz mpc-1.0.1.tar.gz glibc-2.16.0.tar.xz glibc-linuxthreads-2.5.tar.bz2 glibc-ports-2.16.0.tar.xz linux-3.5.4.tar.bz2 将以上源码包放入~/src目录中1. 配置编译环境
cd ~/src
vim armenv
# 将以下内容写入armenv文件中保存退出
TARGET=arm-linux-gnueabi
PREFIX=/opt/cross/gcc-4.7.2/$TARGET
PATH=$PREFIX/bin:$PATH
export TARGET PREFIX PATH
# 配置编译环境
. armenv
cd ~/src vim armenv # 将以下内容写入armenv文件中保存退出 TARGET=arm-linux-gnueabi PREFIX=/opt/cross/gcc-4.7.2/$TARGET PATH=$PREFIX/bin:$PATH export TARGET PREFIX PATH # 配置编译环境 . armenv 2. 编译binutils
tar -xzf binutils-2.22.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX
make -j2
sudo make install
cd ..
tar -xzf binutils-2.22.tar.gz mkdir binutils-build cd binutils-build ../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX make -j2 sudo make install cd ..3. 第一次编译gcc
tar -xjf gcc-4.7.2.tar.bz2
mkdir gcc-bootstrap-build
tar -xf gmp-5.0.5.tar.xz
tar -xf mpfr-3.1.1.tar.xz
tar -xf mpc-1.0.1.tar.gz
cd gcc-4.7.2
mv -v gmp-5.0.5 gmp
mv -v mpfr-3.1.1 mpfr
mv -v mpc-1.0.1 mpc
cd ../gcc-bootstrap-build
../gcc-4.7.2/configure \
--target=$TARGET --host=x86_64-linux-gnu --build=x86_64-linux-gnu \
--enable-targets=all --prefix=$PREFIX \
--enable-languages=c --with-newlib --without-headers --disable-nls \
--disable-threads --disable-shared --disable-libmudflap --disable-libssp \
--disable-libgomp --disable-decimal-float --enable-checking=release \
--disable-bootstrap --disable-libquadmath \
--with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src \
--with-mpfr-lib=$(pwd)/mpfr/src/.libs
make -j2 all-gcc
make -j2 all-target-libgcc
sudo make install-gcc
sudo make install-target-gcc
sudo cp -v libiberty/libiberty.a $PREFIX/lib
# 以下添加libgcc_eh.a,libgcc_s.a到libgcc.a的软链接,防止编译C库时出错
sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`
sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_s/'`