Arhn - архитектура программирования

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

Я хочу внедрить библиотеку baresip в свой проект 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 -- целевой голый глоток}

[1/2] Создание объекта C CMakeFiles/baresip.dir/baresip.c.o

[2/2] Связывание общей библиотеки C C:\Android\projects\MyApplication\app\build\intermediates\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: ошибка: команда компоновщика не удалась с кодом выхода 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 для целевой / компиляции должна быть не менее 21 для этой библиотеки, у меня было 19, поэтому ndk не компилировался должным образом ...

17.03.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..