Ссылки на предварительно созданные общие библиотеки из библиотеки JNI на Android - PullRequest
2 голосов
/ 17 июня 2011

Я пытаюсь создать интерфейс JNI для существующей базы кода C ++. Я успешно создал файл .so для своей функции JNI и могу успешно вызывать эту функцию из кода Java.

Когда я перехожу к следующему шагу, а именно к вызову функции в libpng (скомпилированной в файл .so с цепочкой инструментов NDK), я могу успешно создать общую библиотеку, связанную с моей функцией JNI, и Файл .MK приводит к тому, что libpng12.so копируется в каталог libs / armeabi, как и должно быть.

Развертывание приложения в эмуляторе помещает как JNI .so, так и libpng.so в каталог lib папки приложения в / data. Вызов System.loadLibrary для моей библиотеки JNI приводит к тому, что этот код находится в каталоге lib моего приложения.

Однако я получаю UnsatisfiedLinkError, когда код пытается получить доступ к файлу libpng.so. Используя strace на эмуляторе, я вижу, что он пытается загрузить libpng.so из / system / lib, а не из того же места, откуда была загружена библиотека JNI.

Есть ли способ контролировать, откуда загружаются ссылочные библиотеки? Не похоже, что они должны быть установлены в / system / lib; тот факт, что развертывание приложения помещает указанный .so-файл в каталог lib приложения, указывает на то, что он будет там найден.

Для чего это стоит, вот файл .MK, который мы используем: LOCAL_PATH: = $ (позвоните в мою директорию)

include $(CLEAR_VARS)

LOCAL_MODULE := png12
LOCAL_SRC_FILES := libpng12.so
LOCAL_EXPORT_C_INCLUDES := /home/jipping/libpng-1.2.44

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := PNGLib
LOCAL_SRC_FILES := PNGLib.cpp
LOCAL_SHARED_LIBRARY := png12

LOCAL_LDLIBS := -L/cygdrive /c/Users/mcfall/workspace/AndroidCalculator/jni -lpng12
LOCAL_C_INCLUDES := /home/mcfall/libpng-1.2.44

include $(BUILD_SHARED_LIBRARY)

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 апреля 2012

Попробуйте загрузить libpng12.so, используя System.loadLibrary. Сделайте это перед загрузкой библиотеки jni, чтобы все необходимые символы уже были загружены.

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