编译安装交叉编译器

博客目录

2019-09-13 15:17 +0800

2019-09-13 17:01 +0800

哪个男孩不想成为编译器呢?

make: mips-linux-gnu-gcc: Command not found
make: *** [Makefile:...: run] Error 127

为了完成MIPS指令集PA的快乐梦想,需要能够编译出MIPS ISA二进制程序的编译器。然而Arch系没有预编译好的MIPS指令集交叉编译器,只能自己动手编译打造一款爆款编译器。

buildhosttarget

  • build:编译软件时使用的平台
  • host:编译出来的软件运行的平台(缺省为build
  • target:用该软件编译出来的软件运行的平台

如果要在交叉编译mips指令集程序,可以配置gcc如下:

  • --build=$MACHTYPE
  • --host=$MACHTYPE
  • --target=mips-linux

配置glibc如下:

  • --build=$MACHTYPE
  • --host=mips-linux
  • --target=mips-linux

注意GCC的架构名称和内核使用的不一样。例如GCC目标平台为mips-linux,内核的目标平台是mips

依赖与源代码

需要的依赖程序:

  • make:执行Makefile
  • gcc:用gcc编译gcc
  • gawk:模式串处理

需要的源代码:

  • binutils
  • gcc
  • glibc
  • mpfr
  • mpc
  • gmp
  • 对应的Linux内核

设置文件夹

创建一个源码文件夹$src,然后下载所有的源代码并解压;然后将mpfrmpcgmp三个文件夹软链接到gcc文件夹下:

ln -s mpfr-x.y.z gcc-x.y.z/mpfr
ln -s mpc-x.y.z gcc-x.y.z/mpc
ln -s gmp-x.y.z gcc-x.y.z/gmp

创建一个目标文件夹$dst(一般放在/opt),然后chown修改为当前用户所有。最后将$DST/bin添加到$PATH最前面

export PATH=$dst/bin:$PATH

编译安装

开始编译前首先记得去除指示include目录的环境变量:

unset C_INCLUDE_PATH
unset CPP_INCLUDE_PATH

然后依次执行:

  1. 编译安装binutils
  2. 安装内核头文件:make headers_install
  3. 编译安装gcc(第一阶段):make all-gcc
  4. 编译安装glibc(第一阶段):make install-headers
  5. 编译安装gcc(第二阶段):make all-target-libgcc
  6. 编译安装glibc(第二阶段):make
  7. 编译安装gcclibstdc++):make

整个过程具体可以参考这个介绍(英文),也可以直接用写好的脚本文件

wget https://doowzs.com/scripts/cross.sh && chmod +x cross.sh
评论功能因技术问题暂时关闭
Comments are disabled due to technical issues.
Alternative: mail to blog.doowzs[at]outlook.com