2013-03-04 1 views
7

Я успешно скомпилировал библиотеку C++ с помощью инструментальной панели android ndk-Standalone , тогда я создал новый проект приложения для Android в Eclipse и когда я поместил mylib.so в jni-папку и выполнил ndk -Build команды он работает отличноОшибка System.loadLibrary()

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

Но при добавлении

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

я получил сообщение об ошибке в LogCat говоря

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

i googled, но не нашел способа решить эту проблему.

+2

Вы не должны указывать полный путь к файлу – itsrajesh4uguys

ответ

6

Недавно я столкнулся с той же ошибкой. Выбрав десятки предложений от SO, я наконец выяснил, что ошибка была в моем родном коде., хотя андроид ndk скомпилировал его без каких-либо проблем/предупреждений.

Попробуйте написать простую основную функцию, чтобы протестировать свой собственный код и скомпилировать с помощью g ++/gcc (или что-то подобное), чтобы проверить наличие ошибок.

Я знаю, что его слишком поздно для искателя, но надеюсь, что кто-то найдет это полезным.

+1

это была проблема. –

5

Если у вас есть скомпилированная родная библиотека (.so -file) в вашем lib/ -Каталога, вы можете обратиться к нему без использования полного пути:

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

Как показаны в tutorial.


Проверьте, чтобы увидеть, если вы установите правильный пакет в вашем Header-файл: How to resolve the java.lang.UnsatisfiedLinkError in NDK in Android?

+0

Я пробовал статический {System.loadLibrary ("mylib"); } Но у меня ошибка –

+0

@ user1568549 обновлено –

2

Пожалуйста, сформулируйте Ваш .so файл, как следующим образом.

static { 

    System.loadLibrary("mylib"); 

} 

Надеюсь, это вам поможет.

+0

Я пробовал статический { System.loadLibrary ("mylib"); } Но я получил ошибку –

+0

Можете ли вы показать мне свой файл android.mk? – itsrajesh4uguys

+0

local_path: = $ (назовем моего-Dir) включает $ (CLEAR_VARS) LOCAL_MODULE: = тир LOCAL_SRC_FILES: = libdash.so включает $ (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 
} 

это поможет вам, Pls. проверить.

10

Люди в основном забыли название «lib» prefix form имя библиотеки. Поэтому, если у вас есть «libusb.so», ваш код должен быть System.loadLibrary («usb») ...

+0

Сэра, вы спасли мой день! Большое спасибо! –