之前被同学问了一个开发版上编译程序依赖的问题,对这方面不是很熟悉,回去之后又重新查了挺久,总之这是个如何用gcc编译交叉工具链的问题.
一般官方会提供好可以使用的整套编译工具链,但是如果需要编译交叉编译用的gcc,需要知道三个概念:
Build Platform: This is the platform on which the compilation tools are executed.
Host Platform: This is the platform on which the code will eventually run.
Target Platform: If this is a compiler, this is the platform that the compiler will generate code for.Build Platform:简单来说就是编译gcc的系统
Host Platform: 执行gcc来编译生成跨平台程序的平台
Target Platform: 执行编译的程序的平台
总的来说gcc也是一个软件,也需要用编译工具编译生成,当然也是使用gcc编译的.(当然第一个gcc肯定不是.
那么进入正题开始编译,这次编译的target_arch是arm-none-linux-gnueabi.
这四个字段的意思是:
arch[-vendor]-os[-abi]
arch is for architecture: arm, mips, x86, i686…
vendor is tool chain supplier: apple,
os is for operating system: linux, none (bare metal)
abi is for application binary interface convention: eabi, gnueabi, gnueabihf
目标是得到交叉编译使用的gcc编译工具链以及对应的glibc库。
1.指定环境
为了不扰乱现有的环境而不使用系统目录变量
export SRC_DIR=/root/cross/src
export BUILD_DIR=/root/cross/build
export INSTALL_DIR=/root/cross/arm
export SYSROOT_DIR=$INSTALL_DIR/sysroot
export BINUTIL_SRC=$SRC_DIR/binutils-2.28
export KERNEL_SRC=$SRC_DIR/linux-4.12.2
export GCC_SRC=$SRC_DIR/gcc-5.4.0
export GLIBC_SRC=$SRC_DIR/glibc-2.25
export TARGET_MACH=arm-none-linux-gnueabi
export BUILD_MACH=$(gcc -dumpmachine)
export LINUX_ARCH=arm
2.Download
mkdir -p $SRC_DIR
cd $SRC_DIR
3.编译binutil
cd $BINUTILS_SRC
./configure --prefix=$INSTALL_DIR --build=$BUILD_MACH --target=$TARGET_MACH --with-sysroot=$SYSROOT_DIR --disable-werror
cd $BINUTIL_SRC
make -j4
make install
3.编译linux头文件