linaro gcc 交叉编译链编译全解析

在此编译的是4.8.3版本的gcc,依赖2.18的glibc,2.24的binutils

参考http://blog.chinaunix.net/uid-24943863-id-3997047.html 和 CodeSourcery的编译脚本

依赖:
gmp
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
mpfr 依赖gmp
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
mpc 依赖mpfr,gmp
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
isl 依赖gmp
ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.11.1.tar.bz2
cloog 依赖isl或者编译自带的,编译cloog自带的有可能会有和binutils需要的isl版本冲突
ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz
binutils 需要依赖isl和cloog
http://releases.linaro.org/archive/14.03/components/toolchain/binutils-linaro/binutils-linaro-2.24-2014.03.tar.xz
kernel 作为编译glibc时需要依赖的linux头文件
https://www.kernel.org/pub/linux/kernel/   3.4.39
eglibc 需要用编译出来的交叉编译链中的gcc作为编译器
http://releases.linaro.org/archive/13.10/components/toolchain/eglibc-linaro/eglibc-linaro-2.18-2013.10.tar.bz2
gcc 依赖binutils编译出来的ar等程序
http://releases.linaro.org/archive/14.04/components/toolchain/gcc-linaro/4.8/gcc-linaro-4.8-2014.04.tar.xz
编译顺序:
gmp
mpfr
mpc
isl
cloog
binutils
gcc_first   首先静态编译出用于编译eglibc编译的gcc(这时候需要依赖libc的功能都不要选)
kernel       编译需要用到的headers
eglibc_header 初次编译再次编译gcc所依赖的libc库
gcc_second   编译可以依赖libc的动态库
eglibc      编译完整的glibc库
gcc_all     编译需要依赖glibc完整库的gcc(g++ libmudflap等)

编译平台:Ubuntu 14.04 amd64 server      I5 4G

sudo apt-get update

sudo apt-get upgrade (更新到当前版本的最新系统)
sudo apt-get install linux-generic-lts-xenial linux-headers-generic-lts-xenial linux-image-generic-lts-xenial (更新到当前版本的最新系统时提示还有几个没有更新,可以不需要)
sudo apt-get autoclean
sudo apt-get clean
需要用到编译相关的程序/库
sudo apt-get install gcc                                    
sudo apt-get install gdb
sudo apt-get install g++
sudo apt-get install pkg-config
sudo apt-get install autoconf
sudo apt-get install texinfo
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install gettext
sudo apt-get install unzip
sudo apt-get install texlive
其他
sudo apt-get install cmake
sudo apt-get install git
sudo apt-get install subversion
sudo apt-get install lib32stdc++6
sudo apt-get install lib32ncurses5
sudo apt-get install lib32bz2-1.0
sudo apt-get install lib32z1
sudo apt-get install ncurses-dev

开始构建:

设置相关的参数变量:

#!/bin/bash
BUILDPKGVERSION="GCC Linaro Lite 2014.04"
#build depends
HOST_LIBS=host-libs/usr
BINUTILS_LIBS=binutils-libs/usr
GCC_LIBS=gcc-libs
TARGET=arm-linux-gnueabi
HOST_TARGET=x86_64-linux-gnu
CUR_DIR=`pwd`
SRC_DIR=${CUR_DIR}/src
BUILD_DIR=${CUR_DIR}/build
INSTALL_DIR=${CUR_DIR}/installGMP_TAR=${CUR_DIR}/gmp-4.3.2.tar.bz2
MPFR_TAR=${CUR_DIR}/mpfr-2.4.2.tar.bz2
ISL_TAR=${CUR_DIR}/isl-0.11.1.tar.bz2
CLOOG_TAR=${CUR_DIR}/cloog-0.18.1.tar.bz2
MPC_TAR=${CUR_DIR}/mpc-0.8.1.tar.bz2
LINUX_TAR=${CUR_DIR}/kernel-3.4.39.tar.bz2
GLIBC_TAR=${CUR_DIR}/eglibc-linaro-2.18-2013.10.tar.bz2
BINUTILS_TAR=${CUR_DIR}/binutils-linaro-2.24-2014.03.tar.bz2
GCC_TAR=${CUR_DIR}/gcc-linaro-4.8-2014.04.tar.bz2
GDB_TAR=${CUR_DIR}/gdb-linaro-7.6-2013.05.tar.bz2PROJ_NAME=arm-eglibc-linux-gnueabi
SYSROOT=sysrootGMP_SRC=${SRC_DIR}/gmp
MPFR_SRC=${SRC_DIR}/mpfr
MPC_SRC=${SRC_DIR}/mpc
ISL_SRC=${SRC_DIR}/isl
CLOOG_SRC=${SRC_DIR}/cloog
BINUTILS_SRC=${SRC_DIR}/binutils
LINUX_SRC=${SRC_DIR}/linux
GLIBC_SRC=${SRC_DIR}/glibc
GCC_SRC=${SRC_DIR}/gcc
GDB_SRC=${SRC_DIR}/gdbGMP_BUILD=${BUILD_DIR}/gmp
MPFR_BUILD=${BUILD_DIR}/mpfr
MPC_BUILD=${BUILD_DIR}/mpc
ISL_BUILD=${BUILD_DIR}/isl
CLOOG_BUILD=${BUILD_DIR}/cloog
BINUTILS_BUILD=${BUILD_DIR}/binutils
LINUX_BUILD=${BUILD_DIR}/linux
GLIBC_HEADER_BUILD=${BUILD_DIR}/glibc_header
GLIBC_BUILD=${BUILD_DIR}/glibc
GCC_FIRST_BUILD=${BUILD_DIR}/gcc_first
GCC_SECOND_BUILD=${BUILD_DIR}/gcc_second
GCC_THIRD_BUILD=${BUILD_DIR}/gcc_third
GDB_BUILD=${BUILD_DIR}/gdb
GDB_B_BUILD=${BUILD_DIR}/gdb_build
GDB_SERVER_BUILD=${BUILD_DIR}/gdb_server
export PATH=$PATH:${INSTALL_DIR}/${PROJ_NAME}/bin
#init src build install
init_dir()
{rm -rf ${SRC_DIR} ${BUILD_DIR} ${INSTALL_DIR}mkdir -p ${SRC_DIR}mkdir -p ${BUILD_DIR}mkdir -p ${INSTALL_DIR}
}

配置和编译需要依赖的库(gmp、mpfr等):

#编译静态库的方式,以便后面不需要把动态库包含进来
#gmp
build_gmp()
{tar -jxf ${GMP_TAR} -C ${SRC_DIR}BASENAME=`basename ${GMP_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${GMP_SRC}mkdir -p ${GMP_BUILD}pushd ${GMP_BUILD}${GMP_SRC}/configure \--prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--build=${HOST_TARGET} --host=${HOST_TARGET} \--target=${HOST_TARGET} \--disable-sharedmake -j4 CFLAGS="-g -O2"make install make checkpopd
}#mpfr
build_mpfr()
{tar -jxf ${MPFR_TAR} -C ${SRC_DIR}BASENAME=`basename ${MPFR_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${MPFR_SRC}mkdir -p ${MPFR_BUILD}pushd ${MPFR_BUILD}${MPFR_SRC}/configure \--prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--build=${HOST_TARGET} \--host=${HOST_TARGET} \--target=${TARGET} \--with-gmp=${INSTALL_DIR}/build/${HOST_LIBS} \--disable-shared make -j4 CFLAGS="-g -O2"make install make check popd
}#mpc
build_mpc()
{tar -jxf ${MPC_TAR} -C ${SRC_DIR}BASENAME=`basename ${MPC_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${MPC_SRC}mkdir -p ${MPC_BUILD}pushd ${MPC_BUILD}${MPC_SRC}/configure \--prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--build=${HOST_TARGET} \--host=${HOST_TARGET}  \--target=${TARGET} \--with-gmp=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpfr=${INSTALL_DIR}/build/${HOST_LIBS} \--disable-shared make -j4 CFLAGS="-g -O2"make install make checkpopd
}
#mpc
build_isl()
{tar -jxf ${ISL_TAR} -C ${SRC_DIR}BASENAME=`basename ${ISL_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${ISL_SRC}mkdir -p ${ISL_BUILD}pushd ${ISL_BUILD}${ISL_SRC}/configure \--prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--build=${HOST_TARGET} \--host=${HOST_TARGET}  \--target=${TARGET} \--with-gmp-prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--disable-shared make -j4 CFLAGS="-g -O2"make install make checkpopd
}
#cloog 如果没有配置isl则会编译自带的,如果上面编译了isl,这里没有进行关联,会导致isl冲突而binutils配置失败
build_cloog()
{tar -jxf ${CLOOG_TAR} -C ${SRC_DIR}BASENAME=`basename ${CLOOG_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${CLOOG_SRC}mkdir -p ${CLOOG_BUILD}pushd ${CLOOG_BUILD}${CLOOG_SRC}/configure \--prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--build=${HOST_TARGET} \--host=${HOST_TARGET}  \--target=${TARGET} \--with-isl=system \--with-isl-prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--with-gmp-prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--disable-shared make -j4 CFLAGS="-g -O2"make install make checkpopd
}

编译binutils:(不能加--enable-shared,会导致移植后使用时链接库失败)

#binutils
build_binutils()
{tar -jxf ${BINUTILS_TAR} -C ${SRC_DIR}BASENAME=`basename ${BINUTILS_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${BINUTILS_SRC}mkdir -p  ${BINUTILS_BUILD}pushd ${BINUTILS_BUILD}${BINUTILS_SRC}/configure \--prefix=${INSTALL_DIR}/${PROJ_NAME} \--build=${HOST_TARGET} \--host=${HOST_TARGET} \--target=${TARGET} \--disable-gdb \--disable-libdecnumber \--disable-readline \--disable-sim \--disable-nls \--enable-poison-system-directories \--enable-plugins \--with-float=softfp \--with-pkgversion="'""${BUILDPKGVERSION}""'" \--with-isl=${INSTALL_DIR}/build/${HOST_LIBS} \--with-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}make -j4 all-libiberty CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/libmkdir -p ${INSTALL_DIR}/build/${BINUTILS_LIBS}mkdir -p ${INSTALL_DIR}/build/${BINUTILS_LIBS}/libmkdir -p ${INSTALL_DIR}/build/${BINUTILS_LIBS}/includemkdir -p ${INSTALL_DIR}/build/${BINUTILS_LIBS}/testbincp -r ${BINUTILS_SRC}/include ${INSTALL_DIR}/build/${BINUTILS_LIBS}/includechmod -R u+w ${INSTALL_DIR}/build/${BINUTILS_LIBS}/includecp ${BINUTILS_BUILD}/libiberty/libiberty.a ${INSTALL_DIR}/build/${BINUTILS_LIBS}/libmake -j4 CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/lib includedir=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/include libdir=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libcp ${BINUTILS_BUILD}/bfd/.libs/libbfd.a ${INSTALL_DIR}/build/${BINUTILS_LIBS}/libcp ${BINUTILS_BUILD}/bfd/bfd.h ${INSTALL_DIR}/build/${BINUTILS_LIBS}/includecp ${BINUTILS_SRC}/bfd/elf-bfd.h ${INSTALL_DIR}/build/${BINUTILS_LIBS}/includecp ${BINUTILS_BUILD}/opcodes/.libs/libopcodes.a ${INSTALL_DIR}/build/${BINUTILS_LIBS}/libcp ${BINUTILS_BUILD}/binutils/bfdtest1 ${INSTALL_DIR}/build/${BINUTILS_LIBS}/testbincp ${BINUTILS_BUILD}/binutils/bfdtest2 ${INSTALL_DIR}/build/${BINUTILS_LIBS}/testbinmake install prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man datadir=${INSTALL_DIR}/${PROJ_NAME}/share CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/lib${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etc/configure.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/configure.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly configure${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etc/standards.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/standards.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly standardsrmdir ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etcrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/bfd.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly bfdrm -f ${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ld.bfdrm -f ${INSTALL_DIR}/${PROJ_NAME}/bin/ld.bfdrm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin/ld.bfdpopd
}

编译完成,在

${INSTALL_DIR}/${PROJ_NAME}/bin/目录下出现:ar、ld、as、nm等相关的应用

编译linux头文件(在第一次gcc编译前后都可以):

#linux_header
#headers_install 会把kernel的版本和相关的头文件都拷贝到目标目录里
build_linux_header()
{tar -jxf ${LINUX_TAR} -C ${SRC_DIR}BASENAME=`basename ${LINUX_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${LINUX_SRC}cp -r ${LINUX_SRC} ${LINUX_BUILD}pushd ${LINUX_BUILD}make ARCH=arm INSTALL_HDR_PATH=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr headers_installpopd
}

编译第一次gcc:这个时候不需要用到glibc,因此只编译一个包含静态库的,不需要加--disable-shared,加了之后不会生成libgcc_eh.a(编译glibc的时候依赖),也可以后面添加ln -s libgcc.a libgcc_eh.a来手动生成

--with-newlib是关键

libmudflap thread c++等都是依赖libc的,而glibc只需要用到gcc就行了
init_gcc()
{if [ ! -d  ${GCC_SRC} ]; thentar -jxf ${GCC_TAR} -C ${SRC_DIR}BASENAME=`basename ${GCC_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${GCC_SRC}fi
}
#first_gcc
build_first_gcc()
{init_gccmkdir -p  ${GCC_FIRST_BUILD}pushd ${GCC_FIRST_BUILD}#configure${GCC_SRC}/configure \--build=${HOST_TARGET} \--host=${HOST_TARGET} \--target=${TARGET} \--prefix=${INSTALL_DIR}/${PROJ_NAME} \--enable-poison-system-directories \--enable-extra-sgxxlite-multilibs \--enable-lto \--enable-symvers=gnu \--enable-__cxa_atexit \--enable-languages=c \--enable-linker-build-id \--enable-plugin \--enable-gold \--enable-c99 \--enable-long-long  \--disable-libmudflap \--disable-libstdcxx-pch \--disable-nls \--disable-threads \--disable-decimal-float \--disable-libffi \--disable-libquadmath \--disable-libgomp \--disable-libitm \--disable-libatomic \--disable-libssp \--with-gnu-as \--with-gnu-ld \--without-headers \--with-newlib \--with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' \--with-pkgversion="'""${BUILDPKGVERSION}""'" \--with-gmp=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpfr=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpc=${INSTALL_DIR}/build/${HOST_LIBS} \--with-isl=${INSTALL_DIR}/build/${HOST_LIBS} \--with-cloog=${INSTALL_DIR}/build/${HOST_LIBS}  \--with-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-build-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-local-prefix=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \ --with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \--with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar \NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm \OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump \STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip \CC=${HOST_TARGET}-gcc \CXX=${HOST_TARGET}-g++ \LD=${HOST_TARGET}-ld \OBJCOPY=${HOST_TARGET}-objcopy \AR=${HOST_TARGET}-ar \RANLIB=${HOST_TARGET}-ranlib \SED=sedmake -j4 LDFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} CPPFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} build_tooldir=${INSTALL_DIR}/${PROJ_NAME}/${TARGET} AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install-html AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install-pdf AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strippopdrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccinstall ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccinstall.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccinstall.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccinstallrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccint ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccint.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccint.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccintrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/cppinternals ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/cppinternals.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/cppinternals.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly cppinternalsrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/libiberty.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/libiberty.pdf
}

编译完后,在   ${INSTALL_DIR}/${PROJ_NAME}/bin目录下出现gcc等相关的应用,可以编译glibc了

编译glibc_headers:

#告诉glibc依赖的linux头文件和版本信息--enable-kernel=3.4.39 --with-headers=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/include
#后面三个编译比较关键,第一个编译出相关的头文件,stdio.h等,第二个编译出在编译下一个gcc时用到的crtn.o等,第三个编译出libc.so
#--prefix不能随便写,这个路径会加到install_root后面去的,如果会导致编译后面gcc时找不到stdio.h
init_glibc()
{if [ ! -d ${GLIBC_SRC} ]; thentar -jxf ${GLIBC_TAR} -C ${SRC_DIR}BASENAME=`basename ${GLIBC_TAR} .tar.bz2`mkdir -p ${GLIBC_SRC}cp -r ${SRC_DIR}/${BASENAME} ${GLIBC_SRC}/defaultchmod -R u+w ${GLIBC_SRC}/defaultfi
}build_glibc_header()
{init_glibc#ln -s ${INSTALL_DIR}/${PROJ_NAME}/lib/gcc/${TARGET}/4.8.3/libgcc.a ${INSTALL_DIR}/${PROJ_NAME}/lib/gcc/${TARGET}/4.8.3/libgcc_eh.a#ln -s ${INSTALL_DIR}/${PROJ_NAME}/lib/gcc/${TARGET}/4.8.3/${TARGET}/libgcc.a ${INSTALL_DIR}/${PROJ_NAME}/lib/gcc/${TARGET}/4.8.3/${TARGET}/libgcc_eh.a#glibc_header1
mkdir -p ${GLIBC_HEADER_BUILD}/defaultmkdir -p ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/lib ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libpushd ${GLIBC_HEADER_BUILD}/default${GLIBC_SRC}/default/configure \--prefix=/usr \--with-headers=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/include \--build=${HOST_TARGET} \--host=${TARGET} \--disable-profile \--without-gd \--without-cvs \--enable-obsolete-rpc \--enable-add-ons \--enable-kernel=2.6.16 \--with-pkgversion="'""${BUILDPKGVERSION}""'" \BUILD_CC=gcc \CFLAGS="-g -O2" \CC=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-gcc \AR=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar \NM=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm \RANLIB=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ranlib \READELF=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-readelf \PERL=/usr/bin/perl \BASH_SHELL=/bin/bashmake install_root=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/ install-bootstrap-headers=yes install-headers CFLAGS="-g -O2"make csu/subdir_lib CFLAGS="-g -O2"cp csu/crt1.o csu/crti.o csu/crtn.o ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/popd${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-gcc -o ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libc.so -nostdlib -nostartfiles -shared -x c /dev/null
}

编译第二次gcc:这次还是不能编c++,这个需要依赖到glibc相关的动态库,还有一些lib也是用到glibc,因此也不能包含进来,但是可以编译动态库了,强行编译会出现 C compiler cannot create executables错误,查看config.log日志可以得到引用了一些函数

#gcc2
build_second_gcc()
{init_gccmkdir -p ${GCC_SECOND_BUILD}pushd ${GCC_SECOND_BUILD}${GCC_SRC}/configure \--build=${HOST_TARGET} \--host=${HOST_TARGET} \--target=${TARGET} \--prefix=${INSTALL_DIR}/${PROJ_NAME} \--enable-poison-system-directories \--enable-extra-sgxxlite-multilibs \--enable-languages=c \--enable-shared \--enable-threads=posix \--disable-libmudflap \--disable-multilib \--enable-lto \--enable-symvers=gnu  \--enable-__cxa_atexit  \--enable-linker-build-id \--enable-plugin \--enable-gold \--enable-c99 \--enable-long-long  \--disable-libssp \--disable-libgomp \--disable-libitm \--disable-libffi \--disable-libquadmath \--disable-libstdcxx-pch \--disable-libatomic \--disable-nls \--with-gnu-as \--with-gnu-ld \--with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' \--with-pkgversion="'""${BUILDPKGVERSION}""'" \--with-gmp=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpfr=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpc=${INSTALL_DIR}/build/${HOST_LIBS} \--with-isl=${INSTALL_DIR}/build/${HOST_LIBS} \--with-cloog=${INSTALL_DIR}/build/${HOST_LIBS} \--with-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-build-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-local-prefix=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \ --with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \--with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar \NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm \OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump \STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip \SED=sedmake -j4 LDFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} CPPFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} build_tooldir=${INSTALL_DIR}/${PROJ_NAME}/${TARGET} AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install-html AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-stripmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man install-pdf AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-striprm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccinstall ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccinstall.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccinstall.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccinstallrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccint ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccint.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccint.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccintrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/cppinternals ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/cppinternals.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/cppinternals.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly cppinternalsrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/libiberty.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/libiberty.pdfpopd
}

第二次编译glibc(完全编译):

build_glibc()
{init_glibc#glibc1mkdir -p ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/lib/ ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/mkdir -p ${GLIBC_BUILD}/default/pushd ${GLIBC_BUILD}/default/${GLIBC_SRC}/default/configure \--prefix=/usr \--with-headers=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/include \--build=${HOST_TARGET} \--host=${TARGET} \--disable-profile \--without-gd \--without-cvs \--enable-obsolete-rpc \--enable-add-ons --enable-kernel=2.6.16 \libc_cv_forced_unwind=yes \libc_cv_c_cleanup=yes \libc_cv_arm_tls=yes \--with-pkgversion= "'""${BUILDPKGVERSION}""'"\BUILD_CC=gcc \CC=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-gcc \CFLAGS="-g -O2" \AR=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar \NM=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm \RANLIB=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ranlib \READELF=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-readelf \PERL=/usr/bin/perl \BASH_SHELL=/bin/bash make -j4 rm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/info/dir ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/share/info/dirmake install_root=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/ installmake htmlmkdir -p ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/htmlcp -r ${GLIBC_BUILD}/default/manual/libc ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/libcmake pdfmkdir -p ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdfcp ${GLIBC_BUILD}/default/manual/libc.pdf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/libc.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/pt_chownrm -rf ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libc_picrm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libBrokenLocale_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libanl_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libc_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libcidn_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libcrypt_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libdl_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libm_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnsl_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_compat_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_db_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_dns_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_files_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_hesiod_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_nis_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_nisplus_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libresolv_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/librt_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libthread_db_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libutil_pic.arm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libBrokenLocale_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libanl_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libc_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libcidn_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libcrypt_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libdl_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libm_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnsl_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_compat_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_db_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_dns_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_files_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_hesiod_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_nis_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libnss_nisplus_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libresolv_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/librt_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libthread_db_pic.maprm -f ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/libutil_pic.mapmkdir -p ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/sbin/ldconfig ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/sbin/sln ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/catchsegv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/gencat ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/getconf ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/getent ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/iconv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/ldd ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/locale ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/localedef ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/makedb ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/mtrace ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/pcprofiledump ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/pldd ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/rpcgen ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/sotruss ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/sprof ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/tzselect ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/xtrace ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/sbin/iconvconfig ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/sbin/nscd ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/sbin/zdump ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/sbin/zic ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/POSIX_V6_ILP32_OFF32 ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/POSIX_V6_ILP32_OFFBIG ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/POSIX_V7_ILP32_OFF32 ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/POSIX_V7_ILP32_OFFBIG ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/XBS5_ILP32_OFF32 ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/libexec/getconf/XBS5_ILP32_OFFBIG ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binpopd
}

最后一次编译gcc(这时候可以包含需要用到的相关的库和c++了):

参考了arm-cortex_a9-eabi-4.7-eglibc-2.18需要用到的lib

build_third_gcc()
{mkdir -p ${GCC_THIRD_BUILD}pushd ${GCC_THIRD_BUILD}${GCC_SRC}/configure \--build=${HOST_TARGET} \--host=${HOST_TARGET} \--target=${TARGET} \--prefix=${INSTALL_DIR}/${PROJ_NAME} \--enable-threads \--enable-extra-sgxxlite-multilibs \--enable-poison-system-directories \--enable-languages=c,c++,fortran \--enable-shared \--enable-lto \--enable-symvers=gnu \--enable-__cxa_atexit \--enable-linker-build-id \--enable-plugin \--enable-gold \--enable-c99 \--enable-long-long  \--enable-libmudflap \--enable-libgomp \--enable-libitm \--enable-libssp \--disable-libstdcxx-pch \--disable-libatomic \--disable-nls \--with-gnu-as \--with-gnu-ld \--with-pkgversion="'""${BUILDPKGVERSION}""'" \--with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' \--with-gmp=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpfr=${INSTALL_DIR}/build/${HOST_LIBS} \--with-mpc=${INSTALL_DIR}/build/${HOST_LIBS} \--with-isl=${INSTALL_DIR}/build/${HOST_LIBS} \--with-cloog=${INSTALL_DIR}/build/${HOST_LIBS} \--with-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-build-sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \--with-local-prefix=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} \ --with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \--with-build-time-tools=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/bin \AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar \NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm \OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump \STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip \SED=sedmake -j4 LDFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} CPPFLAGS_FOR_TARGET=--sysroot=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} build_tooldir=${INSTALL_DIR}/${PROJ_NAME}/${TARGET} AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip make prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip install make prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip install-htmlmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man AR_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-ar NM_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-nm OBJDUMP_FOR_TARET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-objdump STRIP_FOR_TARGET=${INSTALL_DIR}/${PROJ_NAME}/bin/${TARGET}-strip install-pdfpopdpushd ${INSTALL_DIR}/${PROJ_NAME}rm ./lib/libiberty.armdir includerm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccinstall ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccinstall.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccinstall.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccinstallrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gccint ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/gccint.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/gccint.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly gccintrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/cppinternals ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gcc/cppinternals.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/cppinternals.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly cppinternalsrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/libiberty.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/libiberty.pdfrm -rf ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/lib/libstdc++.so.6.0.19-gdb.py
}

其他可选:

gdb编译

build_gdb()
{tar -jxf ${GDB_TAR} -C ${SRC_DIR}BASENAME=`basename ${GDB_TAR} .tar.bz2`mv ${SRC_DIR}/${BASENAME} ${GDB_SRC}cp -r ${GDB_SRC} ${GDB_BUILD}chmod -R u+x ${GDB_BUILD}mkdir -p ${GDB_B_BUILD}pushd ${GDB_B_BUILD}${GDB_BUILD}/configure \--prefix=/${PROJ_NAME} \--build=${HOST_TARGET} \--target=${TARGET} \--host=${HOST_TARGET} \--disable-sim \--disable-binutils \--disable-elfcpp \--disable-gas \--disable-gold \--disable-gprof \--disable-ld   \--disable-libmcheck \--disable-nls \--with-libexpat-prefix=${INSTALL_DIR}/build/${HOST_LIBS} \--with-system-gdbinit=/${PROJ_NAME}/${HOST_TARGET}/${TARGET}/lib/gdbinit \--with-gdb-datadir=\''${prefix}'\'"'""/${TARGET}/share/gdb""'" \CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include \LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/libmake -j4 CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/libmake install prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man datadir=${INSTALL_DIR}/${PROJ_NAME}/share CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/libmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man datadir=${INSTALL_DIR}/${PROJ_NAME}/share install-html CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/libmake prefix=${INSTALL_DIR}/${PROJ_NAME} exec_prefix=${INSTALL_DIR}/${PROJ_NAME} libdir=${INSTALL_DIR}/${PROJ_NAME}/lib htmldir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html pdfdir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info mandir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/man datadir=${INSTALL_DIR}/${PROJ_NAME}/share install-pdf CPPFLAGS=-I${INSTALL_DIR}/build/${HOST_LIBS}/include LDFLAGS=-L${INSTALL_DIR}/build/${HOST_LIBS}/librm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/annotate ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/annotate.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/annotate.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly annotaterm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/gdbint ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/gdbint.pdfrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/stabs ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/stabs.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/stabs.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly stabsrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/configure.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etc/configure.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/configure.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly configurerm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/standards.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etc/standards.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/standards.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly standardsrmdir ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/etcrm -rf ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/html/bfd.html ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/pdf/bfd.pdfrm -f ${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info/bfd.infoginstall-info --infodir=${INSTALL_DIR}/${PROJ_NAME}/share/doc/${TARGET}/info --remove-exactly bfdmkdir -p ${INSTALL_DIR}/${PROJ_NAME}/${HOST_TARGET}/${TARGET}/include/mv ${INSTALL_DIR}/${PROJ_NAME}/include/gdb ${INSTALL_DIR}/${PROJ_NAME}/${HOST_TARGET}/${TARGET}/includermdir ${INSTALL_DIR}/${PROJ_NAME}/includerm -rf ${INSTALL_DIR}/build/gdbmkdir -p ${INSTALL_DIR}/build/gdbcp -a ${GDB_B_BUILD}/gdb/data-directory/python ${INSTALL_DIR}/build/gdbpopd
}build_gdb_server() {mkdir -p ${GDB_SERVER_BUILD}/defaultpushd ${GDB_SERVER_BUILD}/default${GDB_SRC}/gdb/gdbserver/configure --build=${HOST_TARGET} --build=${HOST_TARGET} --host=${TARGET} --prefix=/usr --disable-shared --disable-sim --disable-binutils --disable-elfcpp --disable-gas --disable-gold --disable-gprof --disable-ld   --disable-libmcheckmake -j4make DESTDIR=${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT} installpushd ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}mkdir -p ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binmv ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/bin/gdbserver ${INSTALL_DIR}/${PROJ_NAME}/${TARGET}/${SYSROOT}/usr/lib/binpopd
}

最后编译完成生成的gcc就可以使用了

:~/package/install/arm-eglibc-linux-gnueabi$ ./bin/arm-linux-gnueabi-gcc -o hello hello.c
:~/package/install/arm-eglibc-linux-gnueabi$ ./hello
-bash: ./hello: cannot execute binary file: Exec format error
:~/package/install/arm-eglibc-linux-gnueabi$ ./bin/arm-linux-gnueabi-readelf -h hello
ELF Header:Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00Class:                             ELF32Data:                              2's complement, little endianVersion:                           1 (current)OS/ABI:                            UNIX - System VABI Version:                       0Type:                              EXEC (Executable file)Machine:                           ARMVersion:                           0x1Entry point address:               0x83e0Start of program headers:          52 (bytes into file)Start of section headers:          5020 (bytes into file)Flags:                             0x5000202, has entry point, Version5 EABI, soft-float ABISize of this header:               52 (bytes)Size of program headers:           32 (bytes)Number of program headers:         8Size of section headers:           40 (bytes)Number of section headers:         38Section header string table index: 35

在这个过程中编译失败很多次,有 C compiler cannot create executables的,

GCC_NO_EXECUTABLES的,找不到stdio.h的,还有zlib编译失败的(由于在编译binutils设置了--disable-multilib,而编译gcc的时候enable了,因此编译失败,不知道是不这个原因)等等。

linaro gcc 交叉编译链编译相关推荐

  1. Linaro GCC 交叉编译工具链 国内源下载列表 (持续更新)

    gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz 链接:https://pan.baidu.com/s/1-DCIVVs6QTGv5tY ...

  2. 安卓linux交叉编译,Linux Ubuntu下用Android NDK 生成独立交叉编译链

    本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...

  3. 使用交叉编译工具链编译并调试linux内核

    内核源码的github地址 现在之后进入到目录之中 编译之前的准备工作:安装一些软件 sudo apt-get install qemu libncurses5-dev gcc-arm-linux-g ...

  4. keil git 编译文件_交叉编译链下的Makefile(STM32F4xx)

    文章围绕makefile文件的编写方式,向读者讲述如何在ubuntu平台上用交叉编译链 arm-none-eabi- 编译出 STM32F4xx 系列 MCU 的执行文件.文章核心在于讲述 arm-n ...

  5. 构建gcc交叉编译工具链

    如何构建一个GCC交叉编译工具链 GCC不仅是一个编译器,它是一个开源工程,可以让你建立各种编译器.一些编译器支持多线程,一些支持共享库,一些支持Multilib(典型的应用是在64位机上运行32位应 ...

  6. 自己动手编译交叉编译链

    这篇文章主要记录一下自己编译 交叉编译链工具的过程.其实很多工作都是别人已经帮我们做好了的,我只是使用一下别人做好的工具. 编译的过程中,主要使用到的工具是:crosstool-ng    编译的流程 ...

  7. Linux下gcc交叉编译工具链制作实例详细总结(附下载地址)

    一.简介 本文主要讲解gcc交叉编译工具链搭建的全过程,以本人实际的操作去讲述整个工具链的搭建,希望对大家有所帮助. 二.工具链的搭建流程 1.下载相关源码:包括binutils.kernel.gcc ...

  8. 编译器:GNU工具链GCC编译器的编译方法和编译步骤

    https://www.runoob.com/w3cnote/working-process-of-the-compiler.html https://www.runoob.com/w3cnote/g ...

  9. linux使用交叉工具链产生的程序怎么下载到mini2440里,Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

最新文章

  1. 【哲学百科】文艺复兴及唯理主义时期(公元1500~公元1750)
  2. commons-fileupload-1.2.1实现文件上传
  3. 079_html5内联SVG
  4. 动态规划之——拦截导弹(nyoj79)
  5. java 拖动图片放大_Android 图片拖拽、放大缩小的自定义控件
  6. 拿下京东榜单第五首战告捷,看联想手机如何上演王者归来
  7. java的方法调用中分不清_java中不太清晰的知识点
  8. 强烈推荐,关于5G最深刻的一篇文!
  9. iOS IM开发建议(一)App框架设计
  10. PowerDesigner 常用配置修改
  11. Linux_异常_01_CentOS7无法ping 百度
  12. C#程序关闭时怎么关闭子线程
  13. java集群之间共享数据_多个JVM之间,数据共享的问题?
  14. matlab阶乘n函数,用matlab编写阶乘函数,调用该函数生成1!,……10!的阶乘表...
  15. 高中生物神经系统的组成,初中生物神经系统考题
  16. 幂函数展开c语言,第三章幂函数展开.pdf
  17. 公平的席位分配(Q值方法)
  18. 记录一下近期自己的顿悟
  19. Lab、RGB、CMY、HSV、HSL
  20. 苹果软件更新在哪里_苹果再次为已停产的AirPort发布软件更新

热门文章

  1. CNN网络的搭建(Lenet5与ResNet18)
  2. WebRTC系列-网络之带宽估计和码率估计(1)
  3. C# IDE SharpDevelop的一些缺陷
  4. 四: netlinklibnl 之 libnl库详解
  5. 一起看 I/O | Flutter 3 更新详解
  6. 如何查看 /dev/sda 下的文件
  7. TF-IDF原理和使用以及算法详解
  8. 同一个世界 两世之约(1-6)
  9. 惠民工程(最小生成树)
  10. 记录一次H3C交换机的配置