首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.UnsatisfiedLinkError: dlopen失败:

java.lang.UnsatisfiedLinkError: dlopen失败:
EN

Stack Overflow用户
提问于 2018-02-08 06:00:10
回答 2查看 16.5K关注 0票数 4

当我在我的项目中添加.so文件时,我面临着这个问题,从其他的ans,我尝试了不同的解决方案,但没有任何解决方案帮助我。

case: 1 --我尝试将放在src/main/jniLibs中,在gradle文件中添加了下面的行,但得到了相同的错误。

代码语言:javascript
复制
 android {
     sourceSets.main.jni.srcDirs = []
}

案例:2,我用本机-lib.cpp添加了cpp文件夹,并在中添加了以下代码:

代码语言:javascript
复制
defaultConfig {
 ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
  }
   }

案例:3,我创建了一个新项目,支持c/c++,并在cpp文件夹下添加了一个.so文件,并在下面的代码中添加了一个.so文件:

代码语言:javascript
复制
defaultConfig {
  externalNativeBuild {
        cmake {
            cppFlags "-std=c++11"

        }
    }
}

我的项目架构

错误代码:

代码语言:javascript
复制
FATAL EXCEPTION: main
Process: ai.kitt.snowboy.demo, PID: 15175
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ai.kitt.snowboy.demo-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libsnowboy-detect-android.so" 
 at java.lang.Runtime.loadLibrary(Runtime.java:366)
 at java.lang.System.loadLibrary(System.java:988)
 at ai.kitt.snowboy.audio.RecordingThread.<clinit>(RecordingThread.java:20)
 at ai.kitt.snowboy.Demo.onCreate(Demo.java:49)
 at android.app.Activity.performCreate(Activity.java:6010)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
 at android.app.ActivityThread.access$800(ActivityThread.java:155)  
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5343)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

我正在使用android 3.0.1,gradle: 3.0.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-08 06:53:23

尝试在build.gradle中添加以下内容

代码语言:javascript
复制
sourceSets.main.jniLibs.srcDirs = ['src/main/jniLibs']

或将以下内容添加到android块中:

代码语言:javascript
复制
sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

当读取默认jniLibs路径时,Gradle可能会出现问题,只需将其隐式化即可。

sourceSets.main.jni.srcDirs无法工作,因为它定义了jni source,如cpp源文件文件夹。

异常堆栈nativeLibraryDirectories=/供应商/ lib,/ system /lib]显示系统根本没有检测到您的lib。要验证它,请精确使用apk以查看是否存在/lib文件夹和*.so

票数 3
EN

Stack Overflow用户

发布于 2022-05-07 08:33:37

或者使主库成为共享库。

代码语言:javascript
复制
add_library(libname SHARED
    //files.cpp
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48678598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档