2013-03-04 3 views
7

Ich habe erfolgreich eine C++ - Bibliothek mit der android ndk-Standalone Toolchain cross-kompiliert, dann habe ich ein neues Android-Anwendungsprojekt in Eclipse erstellt und wenn ich mylib.so in den jni-Ordner und führen Sie ndk -build befiehlt es feinSystem.loadLibrary() Fehler

Prebuilt  : mylib.so <= jni/ 
Install  : mylib.so => libs/armeabi/mylib.so 

arbeitet Aber wenn

static{ 
    System.load("/data/data/my_package/lib/mylib.so"); 
} 

Zugabe bekam ich einen Fehler in der logcat sagen

AndroidRuntime 
    Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: 
    reloc_library[1306]:  36 cannot locate 'xmlCleanupParser'...`` 

Ich googelte es, aber fand keine Möglichkeit, dieses Problem zu lösen.

+2

sollten Sie nicht den vollständigen Pfad der Datei – itsrajesh4uguys

Antwort

6

Ich habe vor kurzem den gleichen Fehler festgestellt. Nachdem ich Dutzende von Vorschlägen von SO ausprobiert hatte, fand ich heraus, dass der Fehler in meinem nativen Code war. obwohl Android ndk hatte es ohne irgendwelche Probleme/Warnungen kompiliert.

Versuchen Sie, eine einfache Hauptfunktion zu schreiben, um Ihren systemeigenen Code zu testen und mit g ++/gcc (oder ähnlichem) zu kompilieren, um nach Fehlern zu suchen.

Ich weiß es ist zu spät für den Fragesteller, aber hoffe jemand anderes findet das nützlich.

+1

das war das Problem. –

5

Wenn Sie Ihre kompilierte native Bibliothek (die .so -Dateien) in Ihrem lib/ -directory, können Sie sich darauf beziehen, ohne den vollständigen Pfad:

static{ 
    System.load("mylib"); 
} 

Wie in der tutorial gezeigt.


Überprüfen Sie, ob Sie das richtige Paket in Ihrem Kopf-Datei festgelegt: How to resolve the java.lang.UnsatisfiedLinkError in NDK in Android?

+0

Ich habe versucht, versucht static {System.loadLibrary ("mylib"); } Aber ich habe den Fehler –

+0

@ user1568549 aktualisiert –

2

Sie bitte Ihre .so-Datei wie wie folgt angeben.

static { 

    System.loadLibrary("mylib"); 

} 

Hoffe, das wird Ihnen helfen.

+0

Ich versuchte statische { System.loadLibrary ("Mylib"); } Aber ich habe den Fehler –

+0

können Sie mir Ihre android.mk Datei zeigen? – itsrajesh4uguys

+0

local_path: = $ (call my-dir) umfassen $ (CLEAR_VARS) LOCAL_MODULE: = Strich LOCAL_SRC_FILES: = libdash.so umfassen $ (PREBUILT_SHARED_LIBRARY) –

4
try { 
     System.load("/data/data/<package name>/lib/libsample-jni.so"); 
    } catch (UnsatisfiedLinkError e) { 
     System.loadLibrary("<sample-jni>"); //remove lib and .so from name 
} 

dies wird Ihnen helfen, Pls. prüfen.

10

Die meisten Menschen vergessen Cut "lib" Präfix Form Bibliotheksname. Wenn Sie also "libusb.so" haben, muss Ihr Code System.loadLibrary ("usb") sein ...

+0

Sir, gespeichert Sie meinen Tag! Danke vielmals! –