【发布时间】: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