我正在尝试运行this项目。每次运行项目时都会出现以下错误:
java.lang.UnsatisfiedLinkError:dlopen失败:/data/app/path.androidspeakerrec-1/lib/arm/libndkspeaker.so:有文本重定位
项目未加载* .so文件。我已经将文件的位置从libs更改为jniLibs,但仍然会遇到同样的问题。
构建.gradle
static {
try {
System.loadLibrary("ndkspeaker");
} catch (UnsatisfiedLinkError e) {
Log.e("Error in loading lib","Native code library failed to load" + e);
}
}
从java代码调用
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkspeaker
LOCAL_LDLIBS := -llog
LOCAL_SRC_FILES := lib_mfcc/abs.c \
lib_mfcc/abs1.c \
lib_mfcc/fft.c \
lib_mfcc/fi_fft.c \
lib_mfcc/fi_mfcc.c \
lib_mfcc/fi_mfcc_initialize.c \
lib_mfcc/fi_mfcc_rtwutil.c \
lib_mfcc/fi_mfcc_terminate.c \
lib_mfcc/log.c \
lib_mfcc/mfcc_bare.c \
lib_mfcc/mtimes1.c \
lib_mfcc/power1.c \
lib_mfcc/rt_nonfinite.c \
lib_mfcc/rtGetInf.c \
lib_mfcc/rtGetNaN.c \
lib_mfcc/sqrt.c \
lib_mfcc/sum.c \
SpeakerRecognizer.c
APP_ABI := armeabi
include $(BUILD_SHARED_LIBRARY)
Android.mk
File storageDir = getExternalFilesDir("Pictures");
.so文件位于project / app / src / main / jniLibs / armeabi中 和project / app / src / main / jniLibs / armeabi-v7a
我该如何解决这个问题?
答案 0 :(得分:0)
您可能需要设置' jniLibs.srcDirs'在gradle文件中。你可以看看这里 - 实际上,问题中的代码可以帮助你:How to setup NDK libs path in Gradle?
答案 1 :(得分:0)
经过一段时间深入挖掘代码后,我得到了问题的解决方案。
我试图运行的项目是一个使用Android mk ndk build的旧项目。所以我从项目中删除了所有cpp文件夹,cmake文件。
然后右键单击库并选择“使用gradle链接c ++”选项。单击该选项,它将显示一个窗口以选择构建系统的类型。选择“ndk build”并将Android.mk路径链接到项目。