注意: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镜像解压到该目录;

1
2
$ 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的运行环境,帮我们解决这个问题);

1
$ sudo apt-get install qemu qemu-user-static binfmt-support debootstrap

注册aarch64的运行环境(可以通过update-binfmts –display查看当前x86 Ubuntu上的注册情况);

1
$ sudo update-binfmts --enable qemu-aarch64

为了能在x86 Ubuntu上chroot到/path/to/rootfs并执行aarch64的程序,还需要将qemu-aarch64-static拷贝到/path/to/rootfs/usr/bin/;

1
$ sudo cp -av /usr/bin/qemu-aarch64-static /path/to/rootfs/usr/bin/

配置arrch64 Ubuntu的网关;

1
$ cp /etc/resolv.conf /path/to/rootfs/etc/resolv.conf

chroot到aarch64 Ubuntu的rootfs,并安装开发库。

1
2
$ sudo chroot /path/to/rootfs
# apt update && apt install -y libopencv-dev

准备x86上aarch64的编译工具。

1
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上运行了。