NCNN 是腾讯提供的移动端框架 非常适合在手机玩,下面是一个安卓的demo 以便更好的熟悉和使用NCNN。
下载地址:https://github.com/chentyjpm/MobileNetSSD_Demo_AndroidNCNN
问题1:最近在运行MNN的一个工程,ndk从17升级到21后, 出现"android dlopen failed library libomp.so not found"错误,这通常是因为动态库文件libomp.so没有被正确加载导致的。
解决方案也很粗暴,直接将NDK里libomp.so拷贝到自己工程目录'src/main/jniLibs' 下,即可解决问题。
比如我使用的是NDK版本是:android-ndk-r21e,可直接从ndk r21中拷贝一份libomp.so到手机目录上
libomp.so可以在ndk里面找一下,所在目录大概是
android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/9.0.8/lib/linux/aarch64/libomp.so
至于拷贝哪个处理器版本,需要根据你的平台选择,一般在abiFilters会指定 "armeabi-v7a", "arm64-v8a"平台,拷贝对应的版本即可;如果不存在,可以复制其他平台的libomp.so代替试试。
拷贝的目的地址,由jniLibs.srcDirs指定so库的位置:
增加路径
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.so'])
}
新增文件夹
jniLibs.srcDirs = ['src/main/jniLibs', 'libs']
问题2:Android Studio命令行编译提示Unable to make field private final java.lang.String java.io.File.path accessib
解决方案:修改gradle.properties文件
工程文件新增下面代码:
-Dfile.encoding=UTF-8 --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMEDz
再次编译(gradlew.bat build --info),结果如下:
BUILD SUCCESSFUL in 365ms
问题3:Error:CMake '3.10.2' was not found in PATH or by cmake.dir property. CMake '3.10.2' found in SDK did
解决方案:
下载CMake
CMAKE
然后配置:
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
最终demo效果
NCNN
网友评论