Ubuntu 18.04 LTS环境下 MNN 的编译与使用

本文详细介绍在Ubuntu18.04LTS环境下,从GitHub下载MNN源码后的快速编译流程,包括C/C++编译器、NDK、protobuf的安装,以及Linux、Android和iOS平台的MNN库编译步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境 Ubuntu 18.04 LTS

本文主要介绍从github上下载 MNN 后,如何快速的进行编译

1.安装C/C++编译器 gcc 与 NDK

#首先安装好gcc, 用来编译 MNN 中的工具等内容
sudo apt install build-essential
gcc --version

#其次, 安装NDK或者安装Android Studio, 然后安装NDK插件,
#在https://developer.android.com/ndk/downloads/下载安装NDK,建议使用最新稳定版本
#NDK用来编译Android版本的 libmnn.so

  1. 安装protobuf(3.0以上) (Protocol Buffers - Google’s data interchange format)

#安装依赖工具
sudo apt-get install autoconf automake libtool curl make g++ unzip

#编译安装protobuf
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh

./configure
make
make check
sudo make install
sudo ldconfig
  1. 编译 Linux 工具
    cd /path/to/MNN/

#编译flatbuffer(pc平台编译器)等三方工具以及其他内容
./schema/genrate.sh
./tools/script/get_model.sh (可选, 模型仅demo工程需要)
mkdir build && cd build

#编译 MNN 的各种benchmark, converter, quantools, demo, ealuation, test, demo等内容
cmake … -DMNN_BUILD_CONVERTER=true -DMNN_BUILD_BENCHMARK=true -DMNN_BUILD_QUANTOOLS=true -DMNN_EVALUATION=true -DMNN_BUILD_TEST=true -DMNN_BUILD_TRAIN=true -DMNN_BUILD_TOOLS=true -DMNN_BUILD_DEMO=true
make -j4

  1. 编译Android 库
    #属于交叉编译, 原理是cmake 的 CMAKE_TOOLCHAIN_FILE指定交叉编译文件 $ANDROID_NDK/build/cmake/android.toolchain.cmake (Android Studio 使用 cmake 也是这个原理)
    #所以事先需要在 ~/.bashrc 或者 ~/.bash_profile 中设置Android NDK 环境变量, 比如 export ANDROID_NDK=/opt/Android/Sdk/ndk/21.1.6352462

cd project/android

#编译armv7动态库:
mkdir build_32 && cd build_32 && …/build_32.sh

#编译armv8动态库:
mkdir build_64 && cd build_64 && …/build_64.sh

  1. 编译 iOS 库
    在 macOS下, 用xcode打开 project/ios/MNN.xcodeproj, 点击编译即可

  2. 查看内容

#查看 /MNN/build 目录内容
root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build# ls

backendTest.out cmake_install.cmake MNNConvert pictureRotate.out testModel.out
benchmarkExprModels.out dataTransformer.out MNNDump2Json quantized.out testModelWithDescrisbe.out
benchmark.out express MNNV2Basic.out rawDataTransform.out timeProfile.out
checkInvalidValue.out expressDemo.out mobilenetTest.out run_test.out tools
classficationTopkEval.out getPerformance.out multiPose.out runTrainDemo.out train.out
CMakeCache.txt libMNN.so OnnxClip segment.out transformer.out
CMakeFiles Makefile pictureRecognition.out TestConvertResult

#查看 MNN 的模型转换工具 MNNConvert 的使用
root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build# ./MNNConvert -h

Usage:
MNNConvert [OPTION…]

-h, --help Convert Other Model Format To MNN Model

-v, --version show current version
-f, --framework arg model type, ex: [TF,CAFFE,ONNX,TFLITE,MNN]
–modelFile arg tensorflow Pb or caffeModel, ex: *.pb,*caffemodel
–prototxt arg only used for caffe, ex: *.prototxt
–MNNModel arg MNN model, ex: *.mnn
–fp16 save Conv’s weight/bias in half_float data type
–benchmarkModel Do NOT save big size data, such as Conv’s weight,BN’s
gamma,beta,mean and variance etc. Only used to test
the cost of the model
–bizCode arg MNN Model Flag, ex: MNN
–debug Enable debugging mode.
–forTraining whether or not to save training ops BN and Dropout,
default: false

root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build#

#查看 /MNN/project/android 目录内容
root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/project/android# ls
build_32_ndk14.sh build_32_vulkan.sh build.gradle gradlew rTest.sh src
build_32.sh build_64 build_vulkan.sh Hmacro.py run.sh testBasic.sh
build_32_shared.sh build_64.sh CMakeExports.txt nativepub.gradle settings.gradle testCommon.sh
build_32_stl_shared.sh build_gnu_32.sh gradle pullResult.sh speedTest.sh updateTest.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值