Я пытаюсь создать общую библиотеку, которая ссылается на другую общую библиотеку.
Вот мой основной модуль Android.mk:
TOP_LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib/include
LOCAL_MODULE := SightCore-jni
LOCAL_SRC_FILES := SightDemo.cpp SightCore-jni.cpp
LOCAL_SHARED_LIBRARIES := SightAPI
LOCAL_LDLIBS = -llog
include $(BUILD_SHARED_LIBRARY)
У меня также есть готовая общая библиотека в каталоге ./lib с собственным файлом Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SightAPI
LOCAL_SRC_FILES := libSightAPI.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
Исходный файл SightCore-jni.cpp - это интерфейс jni в общую библиотеку и загружается с помощью команды
System.loadLibrary("SightCore-jni");
. В процессе ndk-build я не получаю ошибок компиляции или компоновки .
Когда я пытаюсь запустить приложение и получить доступ к одному из собственных методов, я получаю ошибку UnsatsfiedLinkError.
Я заметил, что если отключить ссылки на SightAPI в моем коде jni и поставить опечатку в строке LOCAL_STATIC_LIBRARIES: = SightAPI, сборка будет успешной, и нет ошибки UnsatisfiedLinkError .
Это означает, что код jni, который у меня есть, хорош (я действительно уверен, что он в порядке ...)
Итак, наблюдение выглядит следующим образом:
Если я скомпилирую общую библиотеку с предварительно созданным ] разделяемая библиотека. Я получаю поврежденный .so файл.
Если я скомпилирую тот же проект ndk без ссылки на предварительно созданную разделяемую библиотеку, не возникнет проблем при загрузке разделяемой библиотеки со стороны java.
Пожалуйста, помогите мне, если сможете.
Заранее спасибо,
Ita