UnsatisfiedLinkError : ... : findLibrary restituito nulla

? Steve Schwarcz @ | Original: StackOverFlow
---
03-01 14:00:53.556: E/AndroidRuntime(27208): java.lang.UnsatisfiedLinkError: Couldn't load
example from loader dalvik.system.PathClassLoader[DexPathList[[zip file 
"/data/app/com.example.test-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-
2, /vendor/lib, /system/lib]]]: findLibrary returned null

Sto cercando di ottenere un ambiente di base impostato per lo sviluppo Android NDK su Ubuntu 12 e non posso ottenere questo errore di andare via . Il mio sistema è già predisposto per regolare lo sviluppo Android con l' SDK . Ho installato l'eclissi C / C ++ strumenti di sviluppo .

Il mio .bashrc ha queste righe in basso :

NDK_HOME=~/android-ndk-r9c
export NDK_HOME
export PATH=/home/steve/android-ndk-r9c:${PATH}
export NDK_PATH=/home/steve/android-ndk-r9c

Nelle mie proprietà Eclipse, la mia posizione in NDK Android- > NDK è impostato su / home / steve / android - NDK - r9c . Il mio Android.mk si presenta come segue :

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test
LOCAL_SRC_FILES := example.c

include $(BUILD_SHARED_LIBRARY)

Ho provato ad utilizzare accumulo NDK sulla riga di comando . Ora ho nella mia directory del progetto di un file obj / local / armeabi / libtest.so, ma non sta facendo nulla di buono me .

Per quel che vale, nessun progetto funziona, nemmeno i progetti di esempio NDK (come HelloJni ) . Cosa posso fare per compilare una domanda di base JNI ?

EDIT : Questo è su un dispositivo . L'uscita NDK -build di ciao - JNI è :

[armeabi-v7a] Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup       : libs/armeabi-v7a/gdb.setup
[armeabi] Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
[armeabi] Gdbsetup       : libs/armeabi/gdb.setup
[x86] Gdbserver      : [x86-4.6] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
[mips] Gdbserver      : [mipsel-linux-android-4.6] libs/mips/gdbserver
[mips] Gdbsetup       : libs/mips/gdb.setup
[armeabi-v7a] Compile thumb  : hello-jni <= hello-jni.c
[armeabi-v7a] SharedLibrary  : libhello-jni.so
[armeabi-v7a] Install        : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so
[armeabi] Compile thumb  : hello-jni <= hello-jni.c
[armeabi] SharedLibrary  : libhello-jni.so
[armeabi] Install        : libhello-jni.so => libs/armeabi/libhello-jni.so
[x86] Compile        : hello-jni <= hello-jni.c
[x86] SharedLibrary  : libhello-jni.so
[x86] Install        : libhello-jni.so => libs/x86/libhello-jni.so
[mips] Compile        : hello-jni <= hello-jni.c
[mips] SharedLibrary  : libhello-jni.so
[mips] Install        : libhello-jni.so => libs/mips/libhello-jni.so
---

Top 5 Risposta

1dextor @

Il modo giusto di caricare la libreria condivisa è

static {
    System.loadLibrary("test");
}

Il nome della libreria è preso dalla definizione LOCAL_MODULE del file Android.mk ( o dal file Application.mk, se si decide di usarlo ) . Nel tuo caso, si denomina il test del modulo . Il ndk-build genera la libreria condivisa libtest.so .

Fate attenzione che non è necessario includere il prefisso liberatrice nella chiamata System.loadLibrary() .

2grzebyk @

So che questa soluzione non corrisponde al tuo problema, ma lo stesso errore compare se si dimentica di aggiungere il supporto nativo al progetto in Eclipse .