【问题标题】:trying to use android NDK/JNI but i get exception UnsatisfiedLinkError: dlopen failed尝试使用 android NDK/JNI 但我得到异常 UnsatisfiedLinkError: dlopen failed
【发布时间】:2020-07-03 05:36:33
【问题描述】:

我正在尝试使用 android ndk/jni,但是当我调用 stringFromJNI(); 时出现此异常;

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.raya.aman- 
A_B2z5nEzTvL2uOtrxLexQ==/lib/arm/libnljnitest.so" has unsupported e_shentsize: 0x9 (expected 0x28)

这是我调用原生库的地方

public class ToolModule {
public native String stringFromJNI();
static {
    System.loadLibrary("nljnitest");
}
}

android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE        := nljnitest
LOCAL_C_INCLUDES    += $(LOCAL_PATH)/ 
LOCAL_SRC_FILES     +=  FieldTest.c  log.c
LOCAL_LDLIBS        += -llog
include $(BUILD_SHARED_LIBRARY)

应用程序.mk

NDK_TOOLCHAIN_VERSION := 4.9
APP_ABI :=  armeabi-v7a arm64-v8a
APP_CFLAGS += -Wno-error=format-security

我将此添加到 build.gradle

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

【问题讨论】:

  • 您没有提到您使用的是哪个版本的 NDK。无论如何,在 NDK 中使用 GCC 很久以前就被弃用了,所以你应该摆脱 NDK_TOOLCHAIN_VERSION := 4.9
  • @Michael 我使用的是最新版本的 ndk 21.0.6,但我如何从工作演示中得到这条线 NDK_TOOLCHAIN_VERSION := 4.9 !那我该怎么办
  • ndk-build 是否生成了那些 .so 文件? file 是否同意它们是动态库?另请注意,您应该使用 cmake 进行新开发。

标签: android android-studio android-ndk java-native-interface ndk-build


【解决方案1】:

看起来系统正在寻找实际上没有此类库的 armeabi 文件夹中的 libnljnitest.so。您是否尝试按照此处的说明过滤受支持的 ABI https://medium.com/mobiwise-blog/unsatisfiedlinkerror-problem-on-some-android-devices-b77f2f83837d 在您的情况下,过滤器可能如下所示。

默认配置 {

ndk {
    abiFilters "arm64-v8a", "armeabi-v7a"
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多