• onnxruntime android版build & 使用


    onnx模型用在android平台上时,需要build onnxruntime for android
    onnxruntime github
    官方build for android文档

    参考项目中有build好的libonnxruntime.so,
    但是你可能需要自己编译,因为build的平台环境是不一样的。

    你可以编译成静态库libonnxruntime.a 或者 动态库libonnxruntime.so

    静态库可能有一个缺点就是里面会有method和其他库的method冲突,在项目build的时候就会check,然后报错。
    然而动态库不会出现这种情况。

    1.动态库编译:
    ./build.sh --android --android_sdk_path /home/user/Android/Sdk --android_ndk_path /home/user/Android/Sdk/ndk/21.4.XXXX --android_abi arm64-v8a --android_api 28 --use_nnapi --parallel --build_shared_lib --config MinSizeRel
    
    • 1

    解释一下参数:
    –android表示build android版
    android_sdk_path: 你的Sdk文件夹
    android_ndk_path:Sdk下面的ndk文件夹(到版本文件夹下),但是具体要看你的项目用的是哪个版本
    android_api:看你的项目是哪个版本,具体在哪里可以查看参考官方build for android文档
    parallel: 并行编译
    build_shared_lib: 使用就是编译动态库,不使用就是静态库
    config: 有4种选项[“Debug”, “MinSizeRel”, “Release”, “RelWithDebInfo”],参考

    build出来的.so文件会在onnxruntime/build/Android/MinSizeRel里,
    把它copy到项目放动态库的文件夹里,
    修改相关设置,CMakeLists.txt.
    同时把onnxruntime/include整个文件夹放进项目里,
    比如说需要用到

    #include "onnxruntime/core/session/experimental_onnxruntime_cxx_api.h"
    
    • 1

    那么你的CMakeLists.txt和设置里需要include两个文件夹:onnxruntime/includeonnxruntime/include/onnxruntime/core/session

    2. 静态库编译:

    和动态库类似,只是不需要--build_shared_lib

    ./build.sh --android --android_sdk_path /home/user/Android/Sdk --android_ndk_path /home/user/Android/Sdk/ndk/21.4.XXXX --android_abi arm64-v8a --android_api 28 --use_nnapi --parallel --config MinSizeRel
    
    • 1

    但是这时MinSizeRel文件夹下并没有libonnxruntime.a文件,这个文件需要自己生成

    vi merge.mri
    #以下是内容
    #需要修改路径
    create libonnxruntime.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_common.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_framework.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_graph.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_mlas.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_optimizer.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_providers.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_session.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_util.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/external/onnx/libonnx.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/lib/libgmock.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/external/onnx/libonnx_proto.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/lib/libgtest.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/external/nsync/libnsync_cpp.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/external/re2/libre2.a
    addlib /home/onnxruntime/build/Android/MinSizeRel/external/protobuf/cmake/libprotobuf-lite.a
    save
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后

    ar -M < ./merge.mri 
    
    • 1
  • 相关阅读:
    全网最全正则实战指南,拿走不谢
    实时数仓:美团点评Flink的实时数仓应用分享
    Java集合实现(一) ArrayList源码以及手写ArrayList
    数据库(mysql)基本概念
    安卓预制权限添加规则
    Git(6)——GitHub
    SparkSQL部分的代码整理(具体的理解过程结合手册 IDEA版)
    云主机安装gcc通过降级glibc解决依赖问题
    ReactNative和Android通信
    Vue2 零基础入门 Vue2 零基础入门第二天 2.4 vue的指令和过滤器 → 2.4.2 过滤器
  • 原文地址:https://blog.csdn.net/level_code/article/details/127654653