本来以为可以很顺利地开始玩耍了,结果只把开发环境搭建成功了,交叉编译MNN失败:(
D2: 开发环境搭建
因为是为了兴趣而做的小开发,平时又太忙,基本都是零碎时间来敲代码,所以目标是在平时办公的装Windows10的笔记本上搭建开发环境,如果是Linux应该会方便很多。
1. 启动WSL2
开启虚拟机平台
用管理员权限打开PowerShell,运行以下命令。或者新建WSL2.bat脚本,以管理员权限运行。
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
安装WSL2内核
重启系统后,用管理员权限打开PowerShell,运行以下命令,将WSL2设置为默认版本
1 | wsl --set-default-version 2 |
2. 安装DOCKER
安装
我安装的是Docker Desktop 3.5.1,直接下载安装即可,注意勾选“Use WSL 2 based engine”选项。我的系统是家庭版,默认勾选此选项。
修改镜像存储位置(可选操作)
由于系统盘空间有限,将Docker的默认根目录调整到数据盘。
退出Docker Desktop
确认所有WSL应用已退出,所有应用都应该是stop状态
1
wsl --list -v
迁移docker-desktop
1
2
3wsl --export docker-desktop "D:\DOCKER-ENGINE\docker-desktop.tar"
wsl --unregister docker-desktop
wsl --import docker-desktop D:\DOCKER-ENGINE\run "D:\DOCKER-ENGINE\docker-desktop.tar" --version 2迁移docker-desktop-data
1
2
3wsl --export docker-desktop-data "D:\DOCKER-ENGINE\docker-desktop-data.tar"
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data D:\DOCKER-ENGINE\data "D:\DOCKER-ENGINE\docker-desktop-data.tar" --version 2
3. 使用Ubuntu 18.04镜像建立开发容器
建立基础容器
从Docker Hub上直接拉取镜像
1
docker pull ubuntu:18.04
启动容器
1
docker run -it -v D:\DOCKER-SHARE:\data --name toy-project ubuntu:18.04 bash
基础环境安装
更新源
1
apt-install update
安装开发基础库
1
apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools gcc-arm-linux-gnueabihf libssl-dev liblz4-tool genext2fs lib32stdc++6 gcc-aarch64-linux-gnu g+conf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libssl-dev texinfo fakeroot libparse-yapp-perl default-jre patchutils lib32gcc-7-dev g++-7 libstdc++-7-dev
使用交叉编译工具链
下载工具链,我用的是Linaro工具链,按常规方式编译程序,例如MNN的示例是
1
2
3
4
5
6
7
8
9export cross_compile_toolchain=linaro/aarch64
mkdir build && cd build
cmake .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_VERSION=1 \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_C_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-g++
make -j4