参照nihui大佬的gitbub,废话少说,直接开整。
前言
这里用了全志的T507进行CPU的版本编译,一定会有童鞋问:为何不用T507的G31的GPU,进行基于vulkan的编译?
答:原因是我没有找到对应的vulkan的so库,如果有小伙伴有这个库,或者在安卓系统中巴拉的so库,可以私信发给我,这边有空了会进行GPU版本的编译。(也可给我发一下opencl的so库,也想试一下阿里的MNN效果)
下载ncnn源代码
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
CMake生成makefile
如果没有安装CMake,请安装CMake:
apt install cmake
如果没有安装交叉编译链(下载网址:https://www.linaro.org/downloads/):
//解压
tar -xvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar
mkdir -p build-aarch64-linux-gnu
cd build-aarch64-linux-gnu
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu-c.toolchain.cmake ..
make -j$(nproc)
make install
基本到这一步还是顺利的!ncnn已经编译完成。
编译成功:
install成功:
测试验证
这采用了T507的开发板,进行ncnn的验证。
把libgomp.so.1.0.0放到对应的usr/lib下面,进行ln的软链接。
把编译好的benchncnn,放在执行目录,同时,把benchmark中所有模型放在同一个目录,执行:
./benchncnn
这里用benchncnn来测试,测试效果如下:
在CMake的时候,如果遇坑,那么,遇坑填坑
1、交叉编译链位置是否在正确,如果找不到,直接用命令查看:
//查看编译链位置
echo $PATH
//导入环境变量
export CC=/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
2、可以cmake的时候带上编译链的位置:
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu-c.toolchain.cmake -DCMAKE_C_COMPILER=/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ..
3、查看交叉编译链选项
aarch64-linux-gnu-gcc -c -Q -march=native --help=target
cc1: error: unknown value ‘native’ for -march
The following options are target specific:
-mabi=ABI lp64
-march=ARCH native
-mbig-endian [disabled]
-mbionic [disabled]
-mcmodel= small
-mcpu=CPU
-mfix-cortex-a53-835769 [enabled]
-mfix-cortex-a53-843419 [enabled]
-mgeneral-regs-only [disabled]
-mglibc [enabled]
-mlittle-endian [enabled]
-mmusl [disabled]
-momit-leaf-frame-pointer [enabled]
-moverride=STRING
-mpc-relative-literal-loads [enabled]
-msign-return-address= none
-mstrict-align [disabled]
-mtls-dialect= desc
-mtls-size= 24
-mtune=CPU
-muclibc [disabled]
Known AArch64 ABIs (for use with the -mabi= option):
ilp32 lp64
Supported AArch64 return address signing scope (for use with -msign-return-address= option):
all non-leaf none
The code model option names for -mcmodel:
large small tiny
The possible TLS dialects:
desc trad
4、aarch64-linux-gnu-gcc/g++ 交叉编译工具链的一些说明
# 查看可以安装的版本
apt-cache search aarch64
# 选择可以安装的版本进行安装
# 此处选择gcc-5-aarch64-linux-gnu以及g++-5-aarch64-linux-gnu进行安装
sudo apt-get install gcc-5-aarch64-linux-gnu
sudo apt-get install gcc-5-aarch64-linux-gnu
# 安装依赖
sudo apt --fix-broken install
# 安装一个没有版本号的gcc和g++
sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install gcc-aarch64-linux-gnu
# 查看版本
aarch64-linux-gnu-g++ -v
aarch64-linux-gnu-gcc -v