Внедрение библиотеки baresip NDK приводит к отсутствию файла *.so

Я хочу внедрить baresip lib в свой проект Android с помощью NDK.

Я нашел актуальный демо-проект "голых костей" ЗДЕСЬ. Как и в readme, я создал несколько нативных библиотек из другого репо и поместил их в папку "распространение". Проект компилируется, устанавливается, работает нормально. По сравнению с собственной реализацией sip для Android, эта библиотека просто потрясающая, используйте ее, забудьте оpermission.USE_SIP, это чушь.

Теперь я хочу импортировать baresip в свой проект, но без файлов Java / Kotlin, планируя создать собственный. Итак, мои шаги:

  1. Добавлено externalNativeBuild записи в build.gradle
  2. Скопировано cpp а также distribution папки в нужные места в моей структуре
  3. Сделайте недействительный кеш и перезапустите

И получилось исключение:

Команда сборки не удалась.

Ошибка при выполнении процесса 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, который #included, libbaresip.a файлы (на abi) присутствуют, так почему libbaresip.soотсутствует, почему не генерируется? какие строчки присутствуют в образце проекта, что позволяет ему строить и работать?

(да, я довольно слаб в родном, потерял поддержку коллег из-за коронавируса...)

1 ответ

Решение

Оказывается, он был немного скрыт, но ничего сложного... версия SDK target/compile должна быть не менее 21 для этой библиотеки, у меня было 19, поэтому ndk не компилировался должным образом...

Другие вопросы по тегам