簡體   English   中英

Android java.lang.UnsatisfiedLinkError-nativeLibraryDirectories(Eclipse)

[英]Android java.lang.UnsatisfiedLinkError - nativeLibraryDirectories (Eclipse)

我正在使用Eclipse並使用NDK版本“ r9d”。 嘗試加載庫時,我一直收到不滿意的鏈接錯誤。

我花了幾個小時試圖找到喜歡這里回答這個還是這個 ,但嘗試所有的解決方案后,上市我還是收到了同樣的錯誤。

Application.mk

NDK_TOOLCHAIN_VERSION=4.8
APP_CPPFLAGS    := -frtti -fexceptions -std=c++11
APP_STL          = gnustl_static
# armeabi armeabi-v7a mips
APP_ABI         := x86
APP_PLATFORM    := android-16

Android.mk

JNI_PATH := $(call my-dir)
LOCAL_PATH := $(JNI_PATH)

#include $(call all-subdir-makefiles)
include $(JNI_PATH)/C3Core/Android.mk
include $(JNI_PATH)/boost/Android.mk

LOCAL_PATH := $(JNI_PATH)
OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include $(JNI_PATH)/OpenCV/sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := Visualizer
LOCAL_SRC_FILES += Visualizer.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl -landroid -ljnigraphics  
LOCAL_CPP_FEATURES += exceptions
LOCAL_STATIC_LIBRARIES += boost_system boost_thread boost_filesystem c3core opencv
include $(BUILD_SHARED_LIBRARY)

Visualizer.java

public class Visualizer {

    public native Bitmap generate(AssetManager mgr, String specifier);

    public native int getSurfaceIndex(int x, int y);

     static {
        try {
            System.loadLibrary("opencv_java");
            System.loadLibrary("Visualizer");
        } catch (UnsatisfiedLinkError e) {
            Log.v("ERROR", "" + e);
        }
    }
}

Android Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.iko"
    android:versionCode="1"
    android:versionName="1.0" >

日志記錄

08-12 15:10:22.849: V/ERROR(30905): java.lang.UnsatisfiedLinkError: Couldn't load opencv_java from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.iko-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.iko-1, /vendor/lib, /system/lib]]]: findLibrary returned null

現在我知道這意味着它找不到庫,但是我不知道如何解決此問題。 該庫位於我的項目中的libs / x86 /處 ,而eclipses項目瀏覽器中的完整文件名為libopencv_java.so-[x86 / le]

感謝您的幫助,如果需要更多詳細信息,請隨時詢問。

編輯

我也試過了

static {
    try {
        System.load("/data/data/com.example.iko/lib/x86/libopencv_java.so");
        System.load("/data/data/com.example.iko/lib/x86/libVisualizer.so");
    } catch (UnsatisfiedLinkError e) {
        Log.v("ERROR", "" + e);
    }
}

我得到這個錯誤-

08-12 14:55:16.259: V/ERROR(29582): java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/data/com.example.iko/lib/x86/libopencv_java.so" not found

嘗試以下方法:

static {
    try {
        System.loadLibrary("opencv_java");
        System.loadLibrary("Visualizer");
    } catch (UnsatisfiedLinkError e) {
        Log.v("ERROR", "" + e);
    }
}

您不應在傳遞給loadLibrary的庫名稱中包含libs / abi部分。 安裝APK后,實際上僅在電話上提取了正確的abi子目錄,並且通過loadLibrary函數搜索了將本機libs提取到的目錄。 (此外,在搜索匹配文件時,您給loadLibrary賦予的名稱以'lib'為前綴,並以'.so'為后綴-因此,您只應傳遞庫的基本名稱,而不能傳遞其他任何名稱。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM