UnsatisfiedLinkError при использовании родной библиотеки

1

Я собрал эту библиотеку, используя NDK в .so. Я могу успешно загрузить его с помощью System.LoadLibary(), но когда я попробую код примера для библиотеки, он выдает UnsatisfiedLinkError. Я проверил исходный код библиотеки, и у нее действительно есть функции, которые я использую с теми же параметрами (кроме JNIEnv и jobject) вместе с теми же результатами. Плюс, конечно, создатель библиотеки разделил бы рабочий пример кода. Так что я делаю неправильно? Я скопировал точный код со страницы и соответствующим образом изменил имена переменных.

Теги:
android-ndk

3 ответа

0
Лучший ответ

Без подробностей это трудно сказать. Посмотрев библиотеку на этом сайте, вы можете по-другому назвать свой класс. Вы должны вызвать свой Java-класс Giffle, и он должен быть в пакете org.jiggawatt.giffle. Это не соглашение об именах, на которое вы случайно наткнетесь; -)

package org.jiggawatt.giffle;

public class Giffle {
    static {
        System.loadLibrary("gifflen");
    }

    public native int Init(String gifName, int w, int h,
            int numColors, int quality,
            int frameDelay);
    public native void Close();
    public native int AddFrame(int[] inArray);
}

Чтобы использовать его, вы должны либо сделать вызовы в классе Giffle, либо, возможно, более чистым способом является использование экземпляра:

Giffle giffle = new Giffle();
giffle.Init(...);
giffle.AddFrame(...);
giffle.Close();

Кажется немного странным, что часть Java не была в zip файле, тем более что имя класса жестко закодировано в символе C. Может быть, у парня, который написал его, была целая куча дополнительного кода в Java-части, которую он не хотел видеть.

Насколько я могу судить, код C и С++ завершен. Вам не нужно изменять его вообще. Реализации собственных методов находятся в файле gifflen.cpp и имеют имена типа Java_org_jiggawatt_giffle_Giffle_Init. Они имеют правильные аргументы на основе сторон для соглашения о вызове JNI.

0

Попробуйте этот метод. http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html мне это помогает.

0

Как вы строите это? Я обнаружил, что мне приходилось выполнять Project- > Clean... в Eclipse каждый раз после запуска ndk-build, чтобы Eclipse взял файл .so и скопировал его в apk.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню