我想使用光嘴在我的安卓项目中实现NDK。
我在这里中发现了最新的“裸骨”演示项目。和自述一样,我从另一个回购中创建了一些本机库,并将其放在“分发”文件夹中。项目正在编译,安装,工作正常。与Android本机sip实现相比,这个库非常棒,使用它,忘记它的卢布permission.USE_SIP。
现在,我想将裸own导入到我的项目中,但是没有Java/Kotlin文件,计划构建自己的。所以我的脚步:
externalNativeBuild条目添加到build.gradlecpp和distribution文件夹复制到结构中的适当位置有个例外:
生成命令失败。 使用参数{--构建C:\Android\sdk\cmake\3.6.4111459\bin\cmake.exe - C:\Android\projects\MyApplication\app.cxx\cmake\debug\armeabi-v7a目标裸with }执行进程C:\Android\projects\MyApplication\app.cxx\cmake\debug\armeabi-v7a时出错 1/2构建C对象CMakeFiles/巴耗西./巴-西.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.c:331:错误:未定义的对“atof”的引用 src/main/main.c:944: error:未定义的对“信号”的引用 src/main/main.c:775: error:未定义的对'__FD_ISSET_chk‘的引用 src/main/main.c:690: error:未定义的对'__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:未定义的“西格菲集”引用
并以
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缺少,为什么没有生成?样例项目中存在哪些行,使其能够进行构建和工作?
(是的,我的本地人很虚弱,因为冠状病毒失去了同事的支持.)
发布于 2020-03-17 09:52:47
结果是有点隐蔽,但没什么难的.对于这个库,目标/编译SDK版本至少应该是21,我有19,这就是为什么ndk没有正确编译.
https://stackoverflow.com/questions/60669280
复制相似问题