Внедрение библиотеки baresip NDK приводит к отсутствию файла *.so
Я хочу внедрить baresip lib в свой проект Android с помощью NDK.
Я нашел актуальный демо-проект "голых костей" ЗДЕСЬ. Как и в readme, я создал несколько нативных библиотек из другого репо и поместил их в папку "распространение". Проект компилируется, устанавливается, работает нормально. По сравнению с собственной реализацией sip для Android, эта библиотека просто потрясающая, используйте ее, забудьте оpermission.USE_SIP
, это чушь.
Теперь я хочу импортировать baresip в свой проект, но без файлов Java / Kotlin, планируя создать собственный. Итак, мои шаги:
- Добавлено
externalNativeBuild
записи в build.gradle - Скопировано
cpp
а такжеdistribution
папки в нужные места в моей структуре - Сделайте недействительный кеш и перезапустите
И получилось исключение:
Команда сборки не удалась.
Ошибка при выполнении процесса C:\Android\sdk\cmake\3.6.4111459\bin\cmake.exe с аргументами {--build C:\Android\projects\MyApplication\app.cxx\cmake\debug\armeabi-v7a -target baresip}
[1/2] Создание объекта C CMakeFiles/baresip.dir/baresip.co
[2/2] Связывание общей библиотеки C C:\Android\projects\MyApplication\app\build\intermediate\cmake\debug\obj\armeabi-v7a\libbaresip.so
ВЫПОЛНЕНО: cmd.exe /C "..."
затем несколько дублированных строк, например:
src / video.c:331: ошибка: неопределенная ссылка на 'atof'
src / main / main.c:944: ошибка: неопределенная ссылка на 'сигнал'
src / main / main.c:775: ошибка: неопределенная ссылка на '__FD_ISSET_chk'
src / main / main.c:690: ошибка: неопределенная ссылка на '__FD_SET_chk'
C: / Android / projects / MyApplication / app / src / main / cpp /../../../../ distribution / openssl / lib / armeabi-v7a / libcrypto.a(armcap.o):armcap.c: функция OPENSSL_cpuid_setup: ошибка: неопределенная ссылка на 'sigfillset'
и заканчивается
clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
ниндзя: сборка остановлена: подкоманда не удалась.
нота app/src/main/cpp/../../../../distribution/
путь к файлам, как указано в CMakeLists
:
set(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../distribution)
Для меня это похоже на невидимые файлы для компилятора, но когда я добавляю / удаляю некоторые / любые ../
ошибка меняется на явно указывающий неверный путь. кроме того, тот же путь и иерархия находятся в образце проекта
Я пытался избавиться baresip.c
файл, но его сбой только при регистрации OnLoad
вызов...
#include <string.h>
#include <pthread.h>
#include <jni.h>
#include <android/log.h>
#include <stdlib.h>
#include <re.h>
#include <baresip.h>
#define LOGD(...) \
if (log_level_get() < LEVEL_INFO) ((void)__android_log_print(ANDROID_LOG_DEBUG, "Baresip Lib", __VA_ARGS__))
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
LOGD("at JNI_OnLoad\n");
return JNI_VERSION_1_6;
}
сбой все еще происходит, но когда я комментирую if (log_level_get() < LEVEL_INFO)
позвоните, мой проект строится и устанавливается нормально... log_level_get()
происходит от baresip.h
, который #include
d, libbaresip.a
файлы (на abi) присутствуют, так почему libbaresip.so
отсутствует, почему не генерируется? какие строчки присутствуют в образце проекта, что позволяет ему строить и работать?
(да, я довольно слаб в родном, потерял поддержку коллег из-за коронавируса...)
1 ответ
Оказывается, он был немного скрыт, но ничего сложного... версия SDK target/compile должна быть не менее 21 для этой библиотеки, у меня было 19, поэтому ndk не компилировался должным образом...