MNN-Android 编译说明

2022-07-20  本文已影响0人  Gavin_2020

一、准备工作

1.准备好Linux(Ubuntu)64位系统,可使用虚拟机VMware Workstation Pro

为什么不在windows下?
此方式编译ncnn库的环境为Linux,所以需要准备好Linux系统或者使用虚拟机安装Linux系统镜像文件.

二、编译步骤

1. 下载MNN库

https://github.com/alibaba/MNN

2. 下载Cmake

下载完毕需要对cmake进行配置,这里就不多描述了。
https://cmake.org/

3. 配置CmakeLists.txt文件(可选)

文件在MNN库下的根目录
这里关闭了动态库编译,也就是使用的是静态库编译

option(MNN_BUILD_SHARED_LIBS "MNN build shared or static lib" OFF)

4. 编写.sh执行命令文件

在MNN根目录创建build_android.sh文件(文件名称自定)


image.png

如下为32位编译例子、这里关闭了部分编译配置。

#!/usr/bin/env bash

##### android 
rm -r android_build
mkdir android_build
pushd android_build
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="armeabi-v7a" \
-DANDROID_NATIVE_API_LEVEL=android-19  \
    #-DCMAKE_BUILD_TYPE=Release \
   # -DANDROID_ABI="arm64-v8a" \
    #-DANDROID_STL=c++_static \
    #-DMNN_USE_LOGCAT=false \
    #-DMNN_BUILD_BENCHMARK=OFF \
    #-DMNN_BUILD_FOR_ANDROID_COMMAND=false \
    #-DMNN_OPENGL=false \
    #-DMNN_BUILD_TRAIN=false \
    #-DMNN_VULKAN=false \
    #-DMNN_SUPPORT_BF16=false \
    #-DMNN_OPENCL=false -DMNN_ARM82=false \
    #-DNATIVE_LIBRARY_OUTPUT=. -DNATIVE_INCLUDE_OUTPUT=. $1 $2 $3
make -j4
printf "is over" 
popd

5. 执行.sh文件

在MNN根目录打开终端
输入./build_android.sh (我的.sh文件名为build_anroid,可根据自身命名修改)


image.png

6. 提取.s或.so文件

找到MNN根目录的build_anroid文件夹下的.so或.a文件(build_android文件夹也是在编写.sh文件命令自定义的)


image.png

注意:.so静态库和.a动态库使用方式不同,可根据自身需求配置

三、问题汇总

1. 目前编译的64或者32位的.a与.so过大,为9m左右(关闭了部分配置),如果有些必须的配置需要添加可能达到13m+,这里暂时没有找到相关量化的方法。
2. 目前编译完成,还没有通过实际使用,由于本人的项目是要使用.a形式,配合我们的c++项目,进行二次编译.so,最终在android中使用。

初步为编译部分后续会持续更新,仅供参数,可能大家遇到的情况都不一致,欢迎指出错误。

上一篇 下一篇

猜你喜欢

热点阅读