一、准备工作
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文件(文件名称自定)

如下为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,可根据自身命名修改)

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

注意:.so静态库和.a动态库使用方式不同,可根据自身需求配置
三、问题汇总
1. 目前编译的64或者32位的.a与.so过大,为9m左右(关闭了部分配置),如果有些必须的配置需要添加可能达到13m+,这里暂时没有找到相关量化的方法。
2. 目前编译完成,还没有通过实际使用,由于本人的项目是要使用.a形式,配合我们的c++项目,进行二次编译.so,最终在android中使用。
初步为编译部分后续会持续更新,仅供参数,可能大家遇到的情况都不一致,欢迎指出错误。
网友评论