2013-03-04 7 views
7

Udało mi się skompilować bibliotekę C++ z Androidem ndk-Standalone toolchain , następnie stworzyłem nowy projekt aplikacji Android w Eclipse i kiedy umieściłem plik mylib.so w folderze jni i wykonam ndk -build poleceń działa dobrzeSystem.loadLibrary() błąd

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

ale gdy dodanie

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

dostałem błąd w LogCat mówiąc

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

Przeszukałem go, ale nie znalazłem żadnego sposobu na rozwiązanie tego problemu.

+2

nie powinieneś podawać pełnej ścieżki pliku – itsrajesh4uguys

Odpowiedz

6

Niedawno napotkałem ten sam błąd. Po wypróbowaniu dziesiątek sugestii z SO, w końcu zorientowałem się, że błąd był w moim natywnym kodzie. mimo że Android ndk skompilował go bez żadnych problemów/ostrzeżeń.

Spróbuj napisać prostą główną funkcję, aby przetestować swój natywny kod i skompilować za pomocą g ++/gcc (lub czegoś podobnego), aby sprawdzić błędy.

Wiem, że jest za późno dla pytającego, ale mam nadzieję, że ktoś inny uzna to za przydatne.

+1

to był problem. –

5

Jeśli masz skompilowany natywne biblioteki (the .so -file) w lib/ -directory, można zwrócić się do niego bez korzystania z pełną ścieżkę:

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

Jak pokazano w tutorial.


Sprawdzić, czy można ustawić odpowiedni pakiet w nagłówku akt: How to resolve the java.lang.UnsatisfiedLinkError in NDK in Android?

+0

Próbowałem statycznego {System.loadLibrary ("mylib"); } Ale mam błąd –

+0

@ user1568549 updated –

2

Proszę podać plik .so jak następująco.

static { 

    System.loadLibrary("mylib"); 

} 

Mam nadzieję, że to ci pomoże.

+0

Próbowałem static { System.loadLibrary ("mylib"); } Ale mam błąd –

+0

czy możesz pokazać mi swój plik android.mk? – itsrajesh4uguys

+0

LOCAL_PATH: = $ (zadzwonić do mojego-dir) obejmują $ (CLEAR_VARS) LOCAL_MODULE: = kreska LOCAL_SRC_FILES: = libdash.so obejmują $ (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 
} 

to ci pomoże, Pls. czek.

10

Ludzie najczęściej zapomnieli wyciąć nazwę biblioteki prefiksu "lib". Więc jeśli masz "libusb.so", twój kod musi być System.loadLibrary ("usb") ...

+0

Panie, uratowałeś mój dzień! Wielkie dzięki! –

Powiązane problemy