Как добавить несколько общих библиотек в Android ndk? - PullRequest
2 голосов
/ 29 августа 2011

В настоящее время в моей программе много общих библиотек * .so, но кажется, что NDK поддерживает только основную общую библиотеку, которая будет использоваться jni.

Пример: приложение Java будет использовать библиотеку A.so, хотя A.so зависит от B, C. Когда я собираю B и C для статических библиотек, а затем использую их в A.so с помощью LOCAL_STATIC_LIBRARIES, приложение работает хорошо.Когда я создаю B и C для разделяемых библиотек, затем использую их в A.so с помощью LOCAL_SHARED_LIBRARIES и загружаю каждый из них с помощью System.loadLibrary ("..."), при запуске приложения происходит сбой.

Я хочу использовать все остальные библиотеки в качестве разделяемой библиотеки, чтобы я мог сохранять гибкость своего приложения, как я могу правильно использовать несколько общих библиотек в Android?

Добавить код Android.mk:

DEPENDENCE_LIBS := gthread-2.0 gmodule-2.0 gobject-2.0 glib-2.0

ifeq ($(BUILD_STATIC),true)
    LOCAL_STATIC_LIBRARIES := $(DEPENDENCE_LIBS)
else
    LOCAL_SHARED_LIBRARIES := $(DEPENDENCE_LIBS)
endif

include $(BUILD_SHARED_LIBRARY)

, если я определяю BUILD_STATIC как true , все работает хорошо, но если я определяю BUILD_STATIC как false , не может работать

Ответы [ 2 ]

1 голос
/ 31 августа 2011

На самом деле мой оригинальный способ верен, у меня просто была орфографическая ошибка в названии библиотеки. Теперь, когда я определил BUILD_STATIC как false и загрузил каждую общую библиотеку с помощью System.loadLibrary ("lib-name"), весь процесс работает правильно.

0 голосов
/ 29 августа 2011

Я не думаю, что System.loadLibrary связывает B.so или C.so с A.so. Он предназначен для загрузки основной библиотеки, которую вы будете вызывать через JNI.

Работает ли, если A.so связывается с B.so и C.so при его сборке? Я думаю, что система должна знать, чтобы связать их автоматически. Если нет, попробуйте использовать системный вызов uselib .

...