Ну, ситуация у меня следующая:
Я работаю со специальным устройством Android, к которому прикреплены некоторые дополнительные функции. Мое приложение работает в Android ndk, и теперь я хочу вызвать некоторые функции, предоставляемые производителями.
Эти функции входят в два разных файла .so, теперь mylib1 и mylib2. Кроме того, я получил заголовки от производителей, чтобы полностью реализовать их в ndk.
Проблема в том, что ни один из них не работает. Я пытаюсь связать их с моей native-lib (основной библиотекой), но я получаю два вида ошибок для одного и того же способа связывания (я думаю, что эта часть довольно странная)
Для mylib1 у меня возникает следующая ошибка, когда я пытаюсь скомпилировать код:
[armeabi] SharedLibrary: libnative-lib.so
C: /Users/JuanJo/Documents/JorgeVerdeguerGomez/Workspace/PCPA/app/src/main/jni/native-lib.cpp: 17: ошибка: неопределенная ссылка на Lib_Beep ()
clang ++. exe: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
В моем первом подходе я думал, что просто неправильно связывал его, несмотря на то, что следовал нескольким ответам, найденным на этой странице, и даже коду из самого руководства Google, но затем я попытался использовать некоторые функции в mylib2.
Странно то, что эта библиотека компилируется и предоставляет определения для методов в своем заголовке (не для другого заголовка, который уже пробовал), но когда я пытаюсь запустить приложение, она просто останавливает приложение при попытке выполнить :
System.loadLibrary ( «родной Пб»);
Если я прокомментирую эту строку, приложение не остановится (оно ничего не делает, потому что все находится в этой библиотеке, но, по крайней мере, показывает начальный экран)
Я также, кажется, не могу найти какой-либо журнал или файл, который говорит мне, почему он остановился.
После объяснения я покажу вам свой android.mk и надеюсь, что вы мне поможете:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib1
LOCAL_SRC_FILES := libAndroid.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib2
LOCAL_SRC_FILES := libAndroidEmvKernel.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libnative-lib
LOCAL_SHARED_LIBRARIES= \
mylib1 \
mylib2
LOCAL_SRC_FILES := \
native-lib.cpp \
restOfCppFiles.cpp
LOCAL_LDLIBS := -llog \
-landroid
include $(BUILD_SHARED_LIBRARY)
Если честно, я думаю, что .so, так или иначе, неправильно скомпилированы или что-то в этом роде, потому что я думаю, что странно иметь две разные реакции на одну и ту же процедуру компоновки и один и тот же тип файлов.
Не стесняйтесь просить больше информации, если вы думаете, что она вам нужна.
Задача ещё не решена.
Других решений пока нет …