本文参考文献: http:///view/clfs-sysroot/arm/cross-tools/chapter.html http://blog./uid-436750-id-2123570.html 感谢youbest的深刻分析!感谢Google!(额,怎么不感谢百度呢? 你懂的。。。) 本文的疏漏和不足之处,还请大家慷慨指出,共同学习! 注:容易出错的部分用红色字体标出。如需转载,请注明出处。:-) 用到的源码包: binutils-2.21.1a.tar.bz2 glibc-ports-2.13.tar.bz2 glibc-linuxthreads-2.5.tar.bz2 glibc-2.14.tar.bz2 gmp-5.0.2.tar.bz2 mpc-0.9.tar.gz gcc-4.6.1.tar.bz2 linux-3.2.13.tar.xz
设置环境: export PREFIX=/usr/local/arm/4.6.1 export TARGET=arm-linux-gnueabi export PATH=$PREFIX/bin:$PATH
1. 编译内核头文件 tar xf linux-3.2.13.tar.xz cd linux-3.2.13 make ARCH=arm headers_check make ARCH=arm INSTALL_HDR_PATH=dest headers_install
tar xf binutils-2.21.1a.tar.bz2 mkdir binutils-build cd binutils-build ../binutils-2.21.1/configure --prefix=$PREFIX \ make configure-host make && make install cp ../binutils-2.21.1/include/libiberty.h $PREFIX/usr/include -v tar xf glibc-2.14.tar.bz2 cd glibc-2.14/ mv glibc-ports-2.13/ ports tar xf ../sources/glibc-linuxthreads-2.5.tar.bz2 cp configure{,.org} -v sed -e 's/3.4/3.[0-9]/g' configure.org > configure mkdir ../glibc-build cd ../glibc-build 以下强制配置很重要: echo "libc_cv_forced_unwind=yes" > config.cache echo "libc_cv_c_cleanup=yes" >> config.cache echo "libc_cv_arm_tls=yes" >> config.cache echo "install_root=$PREFIX" > configparms CC=gcc ../glibc-2.14/configure --prefix=/usr \ cp -v bits/stdio_lim.h $PREFIX/usr/include/bits/ touch /usr/local/arm/4.6.1/usr/include/gnu/stubs.h
4. gcc first pass tar xf gcc-4.6.1.tar.bz2 cd gcc-4.6.1 tar xf ../sources/mpfr-3.0.1.tar.bz2 mv mpfr-3.0.1/ mpfr tar xf ../sources/gmp-5.0.2.tar.bz mv gmp-5.0.2/ gmp tar xf ../sources/mpc-0.9.tar.gz mv mpc-0.9/ mpc mkdir ../gcc-build cd ../gcc-build ../gcc-4.6.1/configure --prefix=$PREFIX \ 必须编译ligbcc make all-gcc && make install-gcc make all-target-libgcc && make install-target-libgcc
5. glibc rm -rf glibc-build mkdir glibc-build cd glibc-build 修改两处源码,否则会出现 “TLS_DTV_UNALLOCATED”未申明的错误。 vi ../glibc-2.14/nptl/allocatestack.c vi ../glibc-2.14/elf/dl-tls.c 增加定义 #define TLS_DTV_UNALLOCATED ((void *) -1l) 增加ligcc_eh.a链接,否则会出现“找不到库libgcc_eh”的错误 ln -sv $PREFIX/lib/gcc/arm-linux-gnueabi/4.6.1/libgcc.a $PREFIX/lib/gcc/arm-linux-gnueabi/4.6.1/libgcc_eh.a 同样,强制配置: echo "libc_cv_forced_unwind=yes" > config.cache echo "install_root=$PREFIX" > configparms BUILD_CC="gcc" CC="$TARGET-gcc" \ 这里,必须先make all ,然后才能make install,否则有可能会出现 "无法创建目标libdl.so“的错误 make all make install 如果到这里没有什么问题,基本上就很顺利了。:-)
6. gcc final rm -rf gcc-build mkdir gcc-build cd gcc-build ../gcc-4.6.1/configure --prefix=$PREFIX --target=$TARGET \ --disable-multilib --with-sysroot=$PREFIX --disable-nls \ --enable-shared --enable-languages=c,c++ \ --enable-__cxa_atexit --enable-c99 --enable-long-long \ --enable-threads=posix make make installl 好,搞定!新鲜出炉的 arm-linux-gcc-4.6.1,赶快试试吧!:-) |
|