在Android Studio中加载so库时出现java.lang.UnsatisfiedLinkError

时间:2017-02-02 07:36:11

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

我正在尝试运行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

我该如何解决这个问题?

2 个答案:

答案 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路径链接到项目。