编译ARM Linux GCC工具链

近日心血来潮想自己编译一次ARM-GCC工具链

于是上网找了找编译方法,并下载了源码,过程中出了很多错,但最终成功编译出了我想要的GCC,于是在此记录一下编译过程.

我的目标GCC版本:4.8.4

GNU编译工具链包括binutils, gcc, glibc

binutils:汇编器、连接器

gcc:预处理器、编译器

glibc: C语言库

编译arm-linux-gcc需要编译两次:

第一次是编译一个不带库的临时gcc,可以用来编译裸机程序如linux内核和u-boot等.

然后用第一次编译的gcc来编译目标平台的glibc(或者uclibc)

然后再进行第二次gcc编译.

准备以下源码:

binutils-2.25.tar.bz2

gcc-4.8.4.tar.bz2

glibc-2.21.tar.xz

gmp-5.1.3.tar.xz

linux-3.4.106.tar.xz

mpc-1.0.3.tar.gz

mpfr-3.1.2.tar.xz

编译顺序是这样的:

gmp -> mpfr -> mpc ->binutils -> gcc -> glibc -> binutils -> gcc

需要注意的是,最好在一个新的文件夹下面进行编译:

#tar -xf gcc-4.8.4.tar.bz2 #cd gcc-4.8.4 #mkdir build #cd build

1.依次编译gmp,mpfr,mpc

#../configure–host=i686-linux-gnu –disable-shared #make #make install

说明: 可以使用../configure –help来查看有哪些参数可以设置 –prefix设置安装目录(默认是/usr/local/lib) –host指定目标平台 –disable-shared不编译动态库

2.编译binutils

第一次编译的配置: #../configure –disable-nls–disable-multilib –disable-shared –target=arm-none-linux-gnueabi–prefix=/home/toolchain/arm-none-linux-gcc

make

make install

3.编译gcc

#../configure –enable-targets=all–enable-languages=c –disable-checking –disable-shared –disable-threads–disable-multilib –disable-nls –disable-decimal-float –disable-libgomp–disable-libmudflap –disable-libssp –disable-bootstrap –disable-libquadmath–disable-libatomic –without-headers –with-newlib –host=i686-linux-gnu  –target=arm-none-linux-gnueabi–prefix=/home/toolchain/arm-none-linux-gnueabi #make -j4 #make install 使用make -j4可以4线程编译,加快速度,我的机器上大约用了8分钟编译完成。

4.用刚才编译的gcc编译目标平台的glibc

#CC=arm-none-linux-gnueabi-gcc../configure –host=arm-linux-gnueabi –prefix=/usr –enable-kernel=2.6.32–with-tls –with-headers=/home/gnu/linux-3.4.106/usr/include –enable-shared –disable-profile-cache-file=config.cache #make -j4 #makeinstall_root=/home/toolchain/arm-linux-gcc/arm-linux-gnueabi/sysroot install

5.再次编译binutils

#../configure–host=i686-linux-gnu –disable-nls –disable-multilib –disable-shared–target=arm-linux-gnueabi –prefix=/home/toolchain/arm-linux-gnueabi–with-sysroot=/home/toolchain/arm-linux-gnueabi/arm-linux-gnueabi/sysroot #make #make install

6.再次编译带C语言库和内核头文件的标准gcc

#../configure–host=i686-linux-gnu –enable-targets=all –enable-languages=c –disable-shared–disable-multilib –disable-nls –disable-decimal-float –disable-libgomp–disable-libmudflap –disable-libssp –disable-bootstrap –disable-libquadmath–disable-libatomic –target=arm-linux-gnueabi –enable-threads=posix–prefix=/home/toolchain/arm-linux-gnueabi –with-sysroot=/home/toolchain/arm-linux-gnueabi/arm-linux-gnueabi/sysroot #make -j4 #make install

补充说明:

使用make install-strip 可以自动进行strip操作,大大减少可执行文件的体积

gcc -s main.c 可以在编译时进行strip操作.