UnsatisfiedLinkError при использовании родной библиотеки - PullRequest
1 голос
/ 24 мая 2011

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

Ответы [ 3 ]

0 голосов
/ 25 мая 2011

Без подробностей сложно сказать. Посмотрев на библиотеку на этом сайте, возможно, вы назвали свой класс по-другому. Вам нужно вызвать ваш класс 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 и C ++ завершен. Вам не нужно изменять его вообще. Реализации нативных методов находятся в gifflen.cpp и имеют имена вроде Java_org_jiggawatt_giffle_Giffle_Init. У них есть правильные аргументы нативной стороны для соглашения о вызовах JNI.

0 голосов
/ 27 мая 2011

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

0 голосов
/ 24 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...