【问题标题】:Implementing baresip NDK library causes lack of *.so file实施 baresip NDK 库导致缺少 *.so 文件
【发布时间】:2020-03-13 11:02:01
【问题描述】:

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

我在HERE 中找到了最新的“基本”演示项目。在自述文件中,我从另一个仓库创建了一些本机库,并放在“分发”文件夹中。项目正在编译,安装,工作正常。与 Android 原生 sip 实现相比,这个库非常棒,使用它,忘记 permission.USE_SIP,它的垃圾。

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

  1. 在 build.gradle 中添加了 externalNativeBuild 条目
  2. 已将 cppdistribution 文件夹复制到我的结构中的适当位置
  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.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:function OPENSSL_cpuid_setup: error: undefined reference to '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_OnLoad\n");
    return JNI_VERSION_1_6;
}

崩溃仍然发生,但是当我注释掉if (log_level_get() &lt; LEVEL_INFO) 调用我的项目正在构建和安装就好了...log_level_get() 来自baresip.h,即#included,libbaresip.a 文件(根据 abi ) 存在,那么为什么libbaresip.so 不见了,为什么它没有生成?示例项目中存在哪些使其能够构建和工作的行?

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

【问题讨论】:

    标签: android cmake android-ndk sip baresip


    【解决方案1】:

    原来它有点隐藏,但没什么难的...目标/编译 SDK 版本应该至少为 21 这个库,我有 19,这就是为什么 ndk 没有正确编译...

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多