1. 下载GCC 源码包 : gcc-4.6.3.tar.bz2
2. 下载GCC 依赖包: gmp-5.0.4.tar.bz2, mpfr-3.1.0.tar.bz2 ,mpc-0.9.tar.gz
3. 解压gcc-4.6.3.tar.bz2 指令=》 [flydream@flydream opt]$ tar -xvf gcc-4.6.3.tar.bz2
4. 进入[flydream@flydream opt]$ cd gcc-4.6.3
5. 把下载的gmp-5.0.4.tar.bz2, mpfr-3.1.0.tar.bz2 ,mpc-0.9.tar.gz包放到gcc-4.6.3目录
6. 在gcc-4.6.3目录下分别解压上面的三个包
先安装gmp-5.0.4.tar.bz2
进入gmp目录:cd gmp-5.0.4
建立安装路径: mkdir gmp_install
cd gmp_install
../configure --prefix=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install
make
make install
安装mpfr-3.1.0.tar.bz2
进入mpfr目录
[flydream@flydream gcc-4.6.3]$ cd mpfr-3.1.0
建立安装路径: mkdir mpfr_install
cd mpfr_install
../configure --prefix=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install
make
make install
然后安装mpc-0.9.tar.gz
进入mpc
建立安装路径: mkdir mpc_install
cd mpc_install
../configure --prefix=/opt/gcc-4.6.3/mpc-0.9/mpc_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install --with-mpfr=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install
make
make install
在编译GCC的过程中可能出现“configure: error: cannot compute suffix of object files: cannot compile”的错误,解决方法是:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gcc-4.6.3/mpc-0.9/mpc_install/lib:/opt/gcc-4.6.3/gmp-5.0.4/gmp_install/lib:/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install/lib
最后安装GCC
在GCC源码目录外建立安装路径
mkdir gcc_install
../configure --prefix=/opt/gcc_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install --with-mpfr=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install ----with-mpc=/opt/gcc-4.6.3/mpc-0.9/mpc_install --enable-checking=release --program-suffix=4.6.3 --enable-languages=c,c++
make
make install
注意–program-suffix参数,表示生成的可执行文件的后缀。–enable-languages参数表示要支持的语言。最后make; make install即可。make的时候还有个小技巧:因为gcc文件很多,编译很慢,可以使用make -j N参数,开启多线程编辑。其中N值可以设定为机器CPU核数x2。
编译好了之后就可以使用/opt/gcc-4.6.3/bin/gcc-4.6.3来编译c程序了。为了使用方便,可以将/opt/gcc-4.6.3/bin/gcc-4.6.3/bin放到系统PATH中:
export PATH=$PATH:/opt/gcc-4.6.3/bin/gcc-4.6.3/bin
一、准备工作
1、准备文件
binutils-2.22.tar.bz2
gcc-4.6.3.tar.bz2
glibc-2.14.1.tar.xz
glibc-ports-2.14.1.tar.gz
glibc-linuxthreads-2.5.tar.bz2
gdb-7.4.1.tar.bz2
linux-2.6.38.8.tar.bz2
mpfr-3.1.1.tar.bz2
mpc-1.0.1.tar.gz
gmp-5.1.0.tar.bz2
2、建立以下变量,方便稍候的输入
#vim ~/.bashrc
export TARGET=arm-linux-gnueabi
export PREFIX=/usr/local/arm-linux-gcc/4.6.3
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PATH:$PREFIX/bin
3、为宿主机安装mpfr、mpc、gmp
#tar -xvf gmp-5.1.0.tar.bz2
#cd gmp-5.1.0
#mkdir build
#cd build
#../configure
#make all -j4
#make install
#tar -xvf mpfr-3.1.1.tar.bz2
# cd mpfr-3.1.1
#mkdir build
#cd build
#../configure
#make all -j4
#make install
#tar -xvf mpc-1.0.1.tar.gz
#cd mpc-1.0.1
#mkdir build
#cd build
#../configure
#make all -j4
#make install
4、复制linux-kernel-headers
#tar -xvf linux-2.6.38.8.tar.bz2
#cd linux-2.6.38.8
#make include/linux/version.h
CHK include/linux/version.h
UPD include/linux/version.h
#mkdir -p $TARGET_PREFIX/include
#cp -r ./include/linux/ $TARGET_PREFIX/include
#cp -r ./include/asm-generic/ $TARGET_PREFIX/include
#cp -r ./arch/arm/include/asm/ $TARGET_PREFIX/include
二、编译binutils
#tar -xvf binutils-2.22.tar.bz2
#cd binutils-2.22
#mkdir build
#cd build
#../configure --prefix=$PREFIX --target=$TARGET
#make all -j4
#make install
三、初步编译gcc(不带glibc支持)
#tar -xvf gcc-4.6.3.tar.bz2
重新解压mpfr-3.1.1.tar.bz2、mpc-1.0.1.tar.gz、gmp-5.1.0.tar.bz2,并改名复制至gcc-4.6.3中
#rm -rf mpfr-3.1.1 mpc-1.0.1 gmp-5.1.0
#tar -xvf gmp-5.1.0.tar.bz2
#mv gmp-5.1.0 gmp
#mv ./gmp ./gcc-4.6.3
#tar -xvf mpfr-3.1.1.tar.bz2
#mv mpfr-3.1.1 mpfr
#mv ./mpfr ./gcc-4.6.3
#tar -xvf mpc-1.0.1.tar.gz
#mv mpc-1.0.1 mpc
#mv ./mpc ./gcc-4.6.3
#cd gcc-4.6.3
#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
#make all-gcc -j4
#make install-gcc
#make all-target-libgcc -j4
#make install-target-libgcc
四、编译glibc
#tar -xvf glibc-2.14.1.tar.xz
#tar -xvf glibc-ports-2.14.1.tar.gz
#mv glibc-ports-2.14.1 ports
#mv ./ports/ ./glibc-2.14.1
#tar -xvf glibc-linuxthreads-2.5.tar.bz2 --directory=./glibc-2.14.1
# cd glibc-2.14.1
# mkdir build
# cd build
# CC=$TARGET-gcc
# ln -s /usr/local/arm-linux-gcc/4.6.3/lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a /usr/local/arm-linux-gcc/4.6.3/lib/gcc/arm-linux-gnueabi/4.6.3/libgcc_eh.a
创建config.cache配置文件
# vim config.cache
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_arm_tls=yes
# ../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --disable-profile --cache-file=config.cache --with-binutils=$PREFIX/bin --with-headers=$TARGET_PREFIX/include
#make all -j4
#make install
五、重新编译gcc
# cd gcc-4.6.3/build/
# rm -rf *
# ../configure --prefix=$PREFIX --target=$TARGET --enable-shared --enable-languages=c,c++
# make all -j4
# make install
六、编译gdb
# tar -xvf gdb-7.4.1.tar.bz2
# ../configure --prefix=$PREFIX --target=$TARGET
# make all -j4
# make install
七、创建链接
# cd $PREFIX/bin
# ln -s arm-linux-gnueabi-addr2line arm-linux-addr2line
# ln -s arm-linux-gnueabi-ar arm-linux-ar
# ln -s arm-linux-gnueabi-as arm-linux-as
# ln -s arm-linux-gnueabi-c++ arm-linux-c++
# ln -s arm-linux-gnueabi-c++filt arm-linux-c++filt
# ln -s arm-linux-gnueabi-cpp arm-linux-cpp
# ln -s arm-linux-gnueabi-elfedit arm-linux-elfedit
# ln -s arm-linux-gnueabi-g++ arm-linux-g++
# ln -s arm-linux-gnueabi-gcc arm-linux-gcc
# ln -s arm-linux-gnueabi-gcc-4.6.3 arm-linux-gcc-4.6.3
# ln -s arm-linux-gnueabi-gcov arm-linux-gcov
# ln -s arm-linux-gnueabi-gdb arm-linux-gdb
# ln -s arm-linux-gnueabi-gdbtui arm-linux-gdbtui
# ln -s arm-linux-gnueabi-gprof arm-linux-gprof
# ln -s arm-linux-gnueabi-ld arm-linux-ld
# ln -s arm-linux-gnueabi-ld.bfd arm-linux-ld.bfd
# ln -s arm-linux-gnueabi-nm arm-linux-nm
# ln -s arm-linux-gnueabi-objcopy arm-linux-objcopy
# ln -s arm-linux-gnueabi-objdump arm-linux-objdump
# ln -s arm-linux-gnueabi-ranlib arm-linux-ranlib
# ln -s arm-linux-gnueabi-readelf arm-linux-readelf
# ln -s arm-linux-gnueabi-run arm-linux-run
# ln -s arm-linux-gnueabi-size arm-linux-size
# ln -s arm-linux-gnueabi-strings arm-linux-strings
# ln -s arm-linux-gnueabi-strip arm-linux-strip
完成