MNN编译android_an old version of cmake is being used that cannot -程序员宅基地

技术标签: android  linux  mnn  onnx  

docker编译:

https://github.com/hzung/build-mnn-for-android

我用的win10下的linux子系统,ndk下载:

好像21,22都可以

https://developer.android.google.cn/ndk/downloads/revision_history

不可以的版本:

1. android-ndk-r23-linux

需要升级cmake到3.19以上,否则报错:

  An old version of CMake is being used that cannot automatically detect
  compiler attributes.  Compiler identification is being bypassed.  Some
  values may be wrong or missing.  Update to CMake 3.19 or newer to use
  CMake's built-in compiler identification.

2. android-ndk-r15c-linux-x86_64

ndk15rc报错:

Neon double or quad precision register expected

这个错这次没见到:

Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR)

下载MNN代码:

https://github.com/alibaba/MNN

MNN CMakeLists.txt
CMakelist.txt 设置MNN_ARM82为ON (低精度需要的动态库)

添加android-NDK:

vim ~/.bashrc
export ANDROID_NDK=/$(ndk电脑的路径)/android-ndk-r21
source ~/.bashrc

查看NDK路径:

echo  $ANDROID_NDK

报错:

CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
make: *** No targets specified and no makefile found.  Stop.

原因:

没有找到ndk,

原因1:~/.bashrc没有权限。

报错显示:

bash后,报错:

bash: /home/xxxxx/.bashrc: Permission denied

解决方法:

sudo chmod 777 ~/.bashrc

source ~/.bashrc

../build_32.sh继续报错,需要把build文件夹中的内容清空,

再编译

原因2:ndk路径写错了

再Ubuntu子系统里面,区分大小写,Windows盘符必须小写,

比如D盘,子系统中是:

/mnt/d/

修改./bashrc文件,

export ANDROID_NDK=/mnt/d/soft/android-ndk-r23-linux/android-ndk-r23
 

编译64位ok:
cd /mnt/d/third_partyMNN
./schema/generate.sh
 cd MNN/project/android
mkdir build_64 && cd build_64 && ../build_64.sh
make -j4

编译32位报错,build_32.sh

解决方法:换高版本ndk,编译ok。


使用动态库
代码设置
// 创建session需要的配置
MNN::ScheduleConfig config;
// 选择Backend
config.type = MNN_FORWARD_CPU;
// 线程数
config.numThread = 2;
// 配置相应的Backend
BackendConfig backendConfig;
// 选择低精度/一般配置计算
backendConfig.precision = BackendConfig::Precision_Low;
// 或者
// backendConfig.precision = BackendConfig::Precision_Normal;
config.backendConfig    = &backendConfig;

android添加库
public class MNNNetNative { // load libraries 
    static { 
    System.loadLibrary("MNN"); 
    System.loadLibrary("MNN_Arm82"); 
    System.loadLibrary("mnncore"); 
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jacke121/article/details/107125973

智能推荐

在compute node上安装neutron时,出错neutron ValueError: :5672_在执行脚本进行neutron网络服务安装时报错是什么原因?-程序员宅基地

文章浏览阅读1.1k次。这个是由于没有按住奥_在执行脚本进行neutron网络服务安装时报错是什么原因?

SSM整合_<!--过滤静态资源--> <mvc:resources location="/css/" -程序员宅基地

文章浏览阅读93次。springmvc(view 视图层) ,spring(service业务层) ,Mybatis (dao持久层)1.spring整合springmvc:springmvc配置文件:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans..._

"当你有一个目标时,就请朝着它努力,你一定会成功的"--世界杯进球记录第一射手克劳泽...-程序员宅基地

文章浏览阅读212次。德国足球队老将克劳泽,一生四次参加世界杯(2002, 2006, 2010, 2014),总共打入16粒进球,是世界杯进球记录拥有者。他的成功,折射出德国人身上优秀的光芒。●童年克洛泽是在1978年出生在波兰的奥博莱,但那里是波兰最大的德裔民族聚居地。从血统上来讲,克洛泽祖祖辈辈都是日耳曼人,而Klose就是最古老的日耳曼姓氏之一。  造成这一切的都是“历史遗留问题”,奥博莱地区在二..._德国球星克劳泽射门

bootstrap练习题-程序员宅基地

文章浏览阅读1.6k次。什么是BootStrap框架Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的前端框架,之所以它能够帮我们快速构建一个前端应用是因为它实现了很多默认的网页样式效果,我们只需要引用它实现的效果即可获得一个漂亮的网页Html、Css和BootStrap框架的关系是什么1.bootstrap就是实现了很多..._bootstrap练习题

Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR_pcstr 变量-程序员宅基地

文章浏览阅读529次。L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP 与P是等效的。P表示这是一个指针。 T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了_pcstr 变量

numpy专题:ndarray常用函数及属性_在ndarray中用什么函数创建等比数列-程序员宅基地

文章浏览阅读474次。import numpy as np#创建一位数组arr1 = np.array([1,2,3,4])print(arr1)[1 2 3 4]#创建二维数组(4行3列)arr2 = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])print(arr2)[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]#查看数组属性print('_在ndarray中用什么函数创建等比数列

随便推点

生活大爆炸第三季 那些精妙的台词翻译_tushy face-程序员宅基地

文章浏览阅读2k次。第三季的精彩语录值得记录。_tushy face

邮件发送与接收,支持163邮箱、outlook邮箱、exchange邮箱_. 集成&自动化中配置发送邮件节点,发件人邮箱账号支持哪些邮箱类型-程序员宅基地

文章浏览阅读2.4k次。邮件发送与接收,支持163邮箱、outlook邮箱、exchange邮箱依赖的jar包邮件收发公共服务层实现package com.example.demo.service.impl;import com.example.demo.model.EmailMessageBO;import com.example.demo.model.EmailSendBO;import com.example.demo.model.FileBean;import com.example.demo.serv_. 集成&自动化中配置发送邮件节点,发件人邮箱账号支持哪些邮箱类型

android pppd参数介绍,android 3G pppd 调试记录-程序员宅基地

文章浏览阅读675次。android 3G pppd 调试记录。1. JAVA 部分android/development/data/etc/apns-conf_sdk.xml ---> system/etc/apns-conf.xml注意 apns 的版本,apn="3gnet"mcc="460"mnc="01"proxy=""port=""user=""server=""password=""type..._pppd 中拨号mcc和mnc 配置

php okhttp3 上传文件,Android使用OKHttp库实现视频文件的上传到服务器功能-程序员宅基地

文章浏览阅读697次。1 服务器接口简介此处我使用的服务器接口是使用Flask编写,具体实现代码:# -*- coding: utf-8 -*-from flask import Flask, render_template, jsonify, requestimport timeimport osimport base64app = Flask(__name__)UPLOAD_FOLDER = 'E:\myuploa..._okhttp3上传视频

android常用的必备基础知识_android必背知识-程序员宅基地

文章浏览阅读151次。首先从四大组件说起: Activity: 生命周期: activity三种状态:运行(运行在最前端)、停止(不可见,完全被覆盖)、暂停(可见,但前端还有其他activity) 生命周期相关的方法:onCreate-onStart-onResume-onPause-onStop-onDestory-onRestart 切换时如果要保存数据, 可以重写: onSaveInstanceStat..._android必背知识

matplotlib的imshow函数显示灰度图像要设置vmin和vmax2个参数_imshow vmin-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏13次。matplotlib的imshow函数在显示灰度图像的时候要设置vmin和vmax2个函数_imshow vmin