解決Android Studio 報錯 “l(fā)ibrary "libomp.so" not found”

NCNN 是騰訊提供的移動端框架 非常適合在手機(jī)玩,下面是一個安卓的demo 以便更好的熟悉和使用NCNN。
下載地址:https://github.com/chentyjpm/MobileNetSSD_Demo_AndroidNCNN

問題1:最近在運行MNN的一個工程,ndk從17升級到21后, 出現(xiàn)"android dlopen failed library libomp.so not found"錯誤,這通常是因為動態(tài)庫文件libomp.so沒有被正確加載導(dǎo)致的。

解決方案也很粗暴,直接將NDK里libomp.so拷貝到自己工程目錄'src/main/jniLibs' 下,即可解決問題。

比如我使用的是NDK版本是:android-ndk-r21e,可直接從ndk r21中拷貝一份libomp.so到手機(jī)目錄上
libomp.so可以在ndk里面找一下,所在目錄大概是

android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/9.0.8/lib/linux/aarch64/libomp.so

至于拷貝哪個處理器版本,需要根據(jù)你的平臺選擇,一般在abiFilters會指定 "armeabi-v7a", "arm64-v8a"平臺,拷貝對應(yīng)的版本即可;如果不存在,可以復(fù)制其他平臺的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),結(jié)果如下:

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容