我想使用 NDK 在我的 Android 项目中实现baresip lib。
我在这里找到了最新的“基本”演示项目。在自述文件中,我从另一个仓库创建了一些本机库,并放在“分发”文件夹中。项目正在编译,安装,工作正常。与 Android 原生 sip 实现相比,这个库非常棒,使用它,忘记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 --目标裸露}
[1/2] 构建C对象CMakeFiles/baresip.dir/baresip.co
[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:function OPENSSL_cpuid_setup: error: undefined reference to 'sigfillset'
并以
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
忍者:构建停止:子命令失败。
noteapp/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()
来自d,baresip.h
文件(每个 abi)存在,那么为什么丢失,为什么它没有生成?示例项目中存在哪些使其能够构建和工作的行?#include
libbaresip.a
libbaresip.so
(是的,我的母语很弱,由于冠状病毒而失去了同事的一些支持......)