x86 Ubuntu上建立aarch64/arm64 Ubuntu的交叉编译链

注意:x86 Ubuntu下构建的aarch64 Ubuntu版本需要和程序最终运行的aarch64 Ubuntu的版本保持一致(如果x86 Ubuntu版本和构建的aarch64 Ubuntu版本一致,安装aarch64的编译工具会简单一些,直接apt install。本文以Ubuntu 20.04.03举例)。


  • 准备aarch64(即arm64)的文件系统rootfs;
    • 从http://cdimage.ubuntu.com/ubuntu-base/releases/下载对应版本的base镜像,之后将基于此镜像构建编译环境;
    • 在x86 Ubuntu上新建一个rootfs目录,并将下载的base镜像解压到该目录;
      $ mkdir /path/to/rootfs
      $ tar -zxf ubuntu-base-20.04.3-base-arm64.tar.gz -C /path/to/rootfs
    • 在x86 Ubuntu上安装chroot到/path/to/rootfs所必须的软件(正常情况,因为可执行程序被编译目标架构不同,在x86 Ubuntu上无法执行aarch64 Ubuntu上的命令,也就无法在x86 Ubuntu上给aarch64 Ubuntu以apt的方式安装程序。然而qemu可以在x86 Ubuntu上构建一个aarch64 Ubuntu的运行环境,帮我们解决这个问题);
      $ sudo apt-get install qemu qemu-user-static binfmt-support debootstrap
    • 注册aarch64的运行环境(可以通过update-binfmts --display查看当前x86 Ubuntu上的注册情况);
      $ sudo update-binfmts --enable qemu-aarch64
    • 为了能在x86 Ubuntu上chroot到/path/to/rootfs并执行aarch64的程序,还需要将qemu-aarch64-static拷贝到/path/to/rootfs/usr/bin/;
      $ sudo cp -av /usr/bin/qemu-aarch64-static /path/to/rootfs/usr/bin/
    • 配置arrch64 Ubuntu的网关;
      $ cp /etc/resolv.conf /path/to/rootfs/etc/resolv.conf
    • chroot到aarch64 Ubuntu的rootfs,并安装开发库。
      $ sudo chroot /path/to/rootfs
      # apt update && apt install -y libopencv-dev

  • 准备x86上aarch64的编译工具。
    sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

之后做arm程序开发,需要使用第三方库,只需要chroot到rootfs中安装,并通过配置CMakeLists.txt告诉CLion去/path/to/rootfs寻库和去/寻aarch64的编译工具gcc、g++就OK了。这样,在x86 Ubuntu上编译的aarch64程序就能在对应版本的aarch64 Ubuntu上运行了。

你可能感兴趣的:(开发,ubuntu,交叉编译,aarch64)