编译ARM Linux GCC工具链

67 篇文章 9 订阅
10 篇文章 0 订阅

近日心血来潮想自己编译一次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操作.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值