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");
}
}
StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。
【IT面经】程序员的面试宝典IT面试经典,一览无余...
在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地。这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之...
硬件是Surface Pro 3,系统是最近升级的Win10。注1: 在升级前也有同样的毛病,升级Win10后起初的几天正常了,但是不知道哪一天老毛病又犯。注2: 用Win8.1的时候以前也是好的,大概3个月前开始有这个毛病的.具体为:1)打开资源管理器 > (左边栏)网络,看不到局域网中的计算机了。只能看到媒体设备和其他设备。2)在资源管理器的地址栏输入(以计算机名为ea_nas01为例)...
童鞋们好,胖嘟嘟的刘嘟嘟老师又回来了! 欢迎来到嘟嘟课堂。 此套题出的非常的好。 第一题很水,很考察细心。注意有些铅笔要div 3+1。 比赛时轻轻松松的AC。 第二题很烦,很考察耐心。 比赛时有点想放弃,搞了一个多小时,写了200行但最终坚持下来了。坚持就是胜利! 但还是不够细心,还有一个情况木有判断,比赛时只过了60分。 “水法真神奇,暴力出奇迹。”!!! 第三题中等偏难,很考
Inf2vec: Latent Representation Model for Social Influence Embedding2018 IEEE 34th International Conference on Data Engineering1. 前言感觉这篇文章和自己之前做的研究方向挺相似的,所以这里想更加细致的看看这个工作,看有什么不同。且有什么值得注意和改进的。所以,看这篇论文的目标是:完全理解这篇文章在做什么;理清楚和自己之前做的工作有什么本质上或者表面上的区别;代码复现;
提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考如果运行出现异常的话 如:500 多半是pom依赖错了 多换几个版本 最新的最好,亲测有效。
fatal: unable to access ‘https://xxxxxxxx’: The requested URL returned error:502很大一部分原因是在首次提交代码时把账号密码打错了解决办法:1、点击WIN10左下角的开始选项,选择设置。2、搜索管理Web凭据。3、选择Windows凭据,对应修改git的账号密码。4、最后到git中重新操作就好啦~...
AppStorage属性包装程序类型,它反映UserDefaults中的值并使该用户默认值中的值更改视图无效。@frozen @propertyWrapper struct AppStorage<Value>使用教程目前官方没有给出样例,后续有demo了,我再进行补充。推荐基础文章推荐《SwiftUI是什么,听听大牛们如何说》经典教程推荐更新近百篇SwiftUI教程《SwiftUI2020教程》帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方
上篇文章说到了用ViewPager实现3D旋转效果,本篇文章说一下自定义View+Camera+Matrix来实现更炫酷一点的效果,3D及百叶窗效果,其实还可以实现许多其他的效果。最后会将实例代码附在文章最后。先看一下最终实现的一个效果:这里说的Camera并不是相机,而是android.graphics.Camera类,它内部包含一个Matrix,它的源码很简单,也就不到200行
在偶尔看源码的过程中。看到有些判断的用法是:var a;if(!!a){ console.log('打印')}为什么要用两个感叹号()呢?因为js 是弱类型,单纯用一个! 感叹号去转义可能会发生不必要的错误这是知乎上的某个比较好的总结双感叹号才能真正的将他转换成对应的Boolean值,第一个感叹号是将其转化成Boolean类型的值,但是这一操作得到的是其取...
做Android app开发的同学应该都听说过或者用过nostra13的Android-Universal-Image-Loader开源库,它在图片异步加载、缓存和显示等方面提供了强大灵活的框架。之前介绍过的android-smart-image-view开源库跟它比起来,真是小巫见大巫了,不仅在功能上,而且在代码量上都差别很大。当然我们在选取开源库的时候并不是功能越强大越好,一切都要看具体需求,