由于eCos需要mips-elf-gcc来编译内核,所以,今天编译了gcc4.4.1最新版本的gcc编译器,步骤如下:
首先,在编译之前必须先导出以下变量:
export TARGET=mips-elf
export PREFIX=/usr/local/$TARGET
export PATH=$PATH:$PREFIX/bin
echo $TARGET
echo $PREFIX
echo $PATH
===================
编译环境:FC9
GCC版本如下:
使用内建 specs。
目标:i386-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux
线程模型:posix
gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
======================
安装binutils-2.19.1,
#tar xjfv binutils-2.19.1.tar.bz2
#mkdir build-binutils
#cd build-binutils
#../binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
#make all
#make install
================================
安装libgmp:
说明:
该库用于进行高精度的运算。
如果你的系统上的gmp库4.1以上,就不用安装了。
用于计算的库:
gmp-4.3.1,
#mkdir build-gmp
#cd build-gmp
#../gmp-4.3.1/configure --prefix=/usr --enable-shared
===========================================
安装libmpfr,
说明:
该库用于进行高精度的运算。
如果你的系统的mpfr库是2.3.2以上,就不用安装了。
#mkdir build-mpfr
#cd build-mpfr
#../mpfr-2.4.1/configure --prefix=/usr --enable-shared --disable-static
===========================================
安装gcc:
#tar jxvf gcc-4.4.1.tar.bz2
#mkdir build-gcc
#cd build-gcc
#../gcc-4.4.1/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-newlib --with-gnu-as --with-gnu-ld
#make all-gcc (注意,这里是make all-gcc)
#make install-gcc (注意,这里是make install-gcc)
说明:
如果使用make install命令安装可能会提示以下错误(用make install-gcc就不会了):
make[2]: Entering directory `/home/gcc-4.4.1/build-gcc/mips-elf/libstdc++-v3'
make[2]: *** 没有规则可以创建目标“install”。 停止。
make[2]: Leaving directory `/home/gcc-4.4.1/build-gcc/mips-elf/libstdc++-v3'
make[1]: *** [install-target-libstdc++-v3] 错误 2
make[1]: Leaving directory `/home/gcc-4.4.1/build-gcc'
make: *** [install] 错误 2
则暂时不要理会之。
======================================
编译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
这次由于有了刚才编译的newlib的支持,就不会再有错误了。
===================================
安装gdb-6.8
#tar zxvf gdb-6.8.tar.gz
#mkdir build-gdb
#cd build-gdb
#../gdb-6.8/configure --target=$TARGET --prefix=$PREFIX --enable-sim-stdio
#make all
#make install
完成!
*********************************************
mips-elf-gcc是用来开发mips硬件程序的,它不能使用动态库,另外有一个有趣的工具叫作:mips-elf-run
它是PC下的一个MIPS的simulator(模拟器),可以模拟运行mips elf程序。
测试如下:
mips-elf-gcc -Tidt.ld -mips4 -EL hello.c -o hello
mips-elf-run hello
就可以看到打印信息了。
其中编译选项-T是给程序指定一个默认的入口,否则会警告。
-EL是为了生成LSB程序,即小端模式。
关键字:交叉编译器,mips-elf-gcc