实现baresip NDK库导致缺少*.so文件



我想使用NDK在我的Android项目中实现baresip-lib。

我发现了最新的";裸骨;HERE的演示项目。正如在readme中一样,我从另一个repo创建了一些本地libs;分布";文件夹项目正在编译、安装、运行良好。与Android原生sip实现相比,这个lib非常棒,使用它,忘记permission.USE_SIP,它的rubish。

现在我想将baresip导入到我的项目中,但没有Java/Kotlin文件,计划构建自己的文件。所以我的步骤:

  1. externalNativeBuild条目添加到build.gradle
  2. 已将cppdistribution文件夹复制到我的结构中的适当位置
  3. 使缓存无效并重新启动

并得到异常:

Build命令失败。

执行进程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/beresip.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:错误:未定义对"signal"的引用

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_cuid_setup:error:未定义对"sigfillset"的引用

并以结束

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用(

ninja:生成已停止:子命令失败。

注意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_OnLoadn");
return JNI_VERSION_1_6;
}

崩溃仍然会发生,但当我评论出if (log_level_get() < LEVEL_INFO)调用时,我的项目正在构建和安装。。。log_level_get()来自baresip.h,即#included,存在libbaresip.a文件(每个abi(,那么为什么缺少libbaresip.so,为什么它不生成?样本项目中存在哪些行,使其能够构建和工作?

(是的,我的母语很弱,由于冠状病毒,我失去了同事的一些支持…(

发现它有点隐藏,但没有什么困难。。。这个库的target/compile SDK版本应该至少是21,我有19,这就是为什么ndk没有正确编译。。。

最新更新