2012-06-27 2 views
4

Прежде всего, я хочу рассказать вам, что я хочу делать. У меня есть .h-файл и .c-файл с обычным C-кодом, в котором я создал общую библиотеку с Android NDK. Итак, теперь у меня есть .so-файл, который называется libtry.so. Кроме того, я хочу использовать собственный код в своем проекте Android Eclipse. Так что я создал .java-файл с классом «Счетчик» и содержаниемNDK-link библиотека в другую библиотеку «Невозможно загрузить библиотеку: link_image [1966]: 1765 не удалось загрузить нужную библиотеку ...»

public native static int Number(int n); 

и

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

Затем я создаю файл C-заголовок из .java-файл с помощью инструмента javah.

Впоследствии я создаю C-исходный файл для C-Headerfile, в котором я реализую собственный код.

Затем я создаю общую библиотеку с этими двумя файлами с LOCAL_MODULE := test, так что файл будет называться libtest.so. Но дело в том, что я хочу связать общую библиотеку libtry.so, которую я создал в начале, в эту общую библиотеку.

Итак, в Android.mk-файле libtest.so я положил LOCAL_LDLIBS := -L/root/Android/Samples/Test/libs/ -ltry.

На самом деле это работает, потому что я могу скомпилировать этот Android.mk-файл с помощью ndk-build.

Но теперь в моем проекте Eclipse, если я хочу использовать библиотеку libtest.so, это не сработает. Я имею в виду, если я создаю объект класса «Счетчик», в который загружается библиотека libtest.so,

Я получаю error: "Cannot load library: link_image[1966]: 1752 could not load needed library 'libtry.so' for 'libtest.so'".

Что я делаю неправильно? Заранее спасибо.

+0

вы используете ваш так файл для другого проекта или тот, в котором у вас есть код C –

+0

Для того же проекта. На самом деле я хочу еще раз пояснить это для более подробной информации. Файл .so libtry.so содержит функции, которые должны использоваться libtest.so. Так что я сделал ссылку на libtry.so на libtest.so в Android.mk libtest.so, как показано в моем первом комментарии. Я могу скомпилировать с помощью ndk-buid. Но я не могу использовать libtest.so в своем прообразе Eclipse из-за ошибки, указанной в заголовке этого раздела. –

+0

Мой ответ с этой ссылкой был удален. http://stackoverflow.com/questions/10593987/android-ndk-linking/10615769#10615769 В ответ на ваш ответ да, шаги в ссылке показывают, как построить третий libtry.so с помощью только c-источника. В моем случае это была библиотека физики, которую мы должны использовать во многих наших играх. Поэтому мы рассмотрели возможность создания отдельной библиотеки для будущего использования. – codetiger

ответ

4

Вы связываете библиотеку с библиотекой. В коде Java они должны быть загружены явно в обратном порядке, например.

static 
    { 
     System.loadLibrary("dependencylib"); // try 
     System.loadLibrary("mainlib");  // test 
    } 

Ответ взяты из here

+0

Спасибо человеку, я застрял в этом вопросе более 3 дней. –

Смежные вопросы