因为自己要做Gcc移植,所以首先第一步就是要有交叉编译器,自己根据网上的介绍,尝试自己构造一款交叉编译器。也可以用CrossTool来构造,只是那种方法要用到很多软件包,而且过程很复杂,不易控制。我觉得对于简单需要的交叉编译器可以采用以下方法来构造。如果想使用CrossTool安装可以参考:
http://www.kegel.com/crosstool/current/doc/crosstool-howto.html
http://kegel.com/crosstool/crosstool-0.43/buildlogs/
http://blog.163.com/flaty_star/blog/static/3217480201131315336189/
讲的很详细。
我的host环境:Ubuntu10.04 gcc version 4.4.3
1. 准备几个软件包
导出变量,以方便下面使用,根据自己的需要修改(MIPS、Arm同样):
$ export TARGET=alpha-linux
$ export PREFIX=/home/wkx/myfile/cross
2. 安装binutils-2.19.1
$ tar xjfv binutils-2.19.1.tar.bz2
$ mkdir binutils-built // 临时路径,安装完后可删除
$ cd binutils-built
$ ../binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
$ make
这时候出错 …/binutils-2.19.1/gac/config/tc-alpha.c error: format not a string literal and no format arguments
解决办法:找到对应的Makefile(…/binutils-built/gas/Makefile)删除掉-Werror ,避免编译器将warning转换为error
$ make
$ make install
成功。
3. 安装gcc
$ tar –jxvf gcc-4.4.1.tar.bz2 gmp-4.3.2.tar.bz2 mpfr-2.4.2.tar.bz2
$ mv gmp-4.3.2 gcc-4.4.1/gmp
$ mv mpfr-2.4.2 gcc-4.4.1/mpfr
为什么要这么做呢,如果你编译过gcc-4.*以上版本的源码的话,你就知道为什么了。因为GCC now requires the GMP, MPFR and MPC packages. As these packages may not be included in your host distribution, they will be built with GCC.
Unpack each package into the GCC source directory and rename the resulting directories so the GCC build procedures will automatically use them: (把gmp和mpfr解压之后的文件夹改名为gmp和mpfr,然后移动到gcc源码文件夹里面就可以了)。
要不然会在configure时出现一个错误:configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.0+。
$ mkdir gcc-built // 临时路径,安装完后可删除
$ cd gcc-built
$ ../gcc-4.4.1/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-gnu-as --with-gnu-ld --enable-languages=c,c++,java
$ make all-gcc (注意,这里是make all-gcc)
$ make install-gcc (注意,这里是make install-gcc)
一路下来,并没有发现错误。
至此交叉编译环境已经基本搭好。
如果你要使用新的库的话,还需要继续安装库。(下面是复制别人的,参考:http://www.eetop.cn/blog/html/42/144942-17003.html)
编译newlib-1.17.0,
#tar jxvf newlib-1.17.0.tar.bz2
#mkdir build-newlib
#cd build-newlib
#../newlib-1.17.0/configure --target=$TARGET --prefix=$PREFIX
#make all
#make install
=======================================
重新编译gcc,
gcc-4.4.1
#cd build-gcc
#../gcc-4.4.1/configure --target=$TARGET --prefix=$PREFIX --with-newlib --with-gnu-as --with-gnu-ld --disable-shared --disable-libssp
#make all(和前面一次的编译不同,这里是make all)
#make install