安卓棉花糖 - 从一个库模块(本地库)调用另一个库模块导致崩溃

4
我有一个应用程序,其中包含三个模块(例如): "app""emp-library""face-library"app - 只包含加载屏幕,并打开 emp-library 库活动。 emp-library - 这是库模块,它包含基本的员工表单和相机模块来获取员工图像,并将图像传递给 face-library 来检测面部。 face-library - 这是库模块,它包含面部检测库以检测面部(本地库 - 自己的人脸检测算法)。
该应用程序在 Lollipop 设备上运行。但当我在 Marshmallow 上执行该应用程序时,它会崩溃,并显示以下异常。
Fatal signal 11 (SIGSEGV), code 2, fault addr 0xdeadbaad in tid 32696

注意:这是我在日志中得到的唯一错误消息。
我需要为Marshmallow设备构建任何特定的本地库吗?请帮我解决这个问题,谢谢!
更新:
->由于我没有找到任何技术错误(据我所知,我没有在原生代码中遇到任何异常),因此我使用了试错方法。
->我已经从应用程序模块添加了face-library本机调用(在我的情况下不应该使用此项)。现在应用程序没有崩溃。
->因此,问题是“来自emp-library模块的face-library模块调用”。两者都是库模块。
在Marshmallow中调用库模块(emp-library)中的本地库(face-library)是否有任何限制?
1个回答

6
不需要为marshmallow编译特定版本,因为marshmallow可以在armeabi-v7和armeabi上运行,此外还有armV8,这是64位编译。
首先,尝试以armv8版本编译库。
确保您在清单中具有权限,或者如果您要在执行时请求权限(例如相机)。
您的错误是一种通用错误,因此您可以尝试使用本地调试来查找提供错误的库https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0 或者您可以使用Logger,它像c printf一样工作。
这里是logger.h。
#ifndef LOGGER_H
#define LOGGER_H

#include <strings.h>
#include <android/log.h>

#define LOG_INFO(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOG_ERROR(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , LOG_TAG,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO   , LOG_TAG,__VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN   , LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG,__VA_ARGS__)

#endif

一个cpp文件中的示例:

#include "Foo.h"
#include "logger.h" //include your logger.h
#define LOG_TAG "your_Log_tag"

void Foo::myFunction(char * mystring)
{
 LOGV("Hello foo %s",mystring)
}

我希望这能帮助你找到错误的位置。如果您能更具体地描述,我可以帮您解决问题。
我通常使用OpenCV c++和Android进行图像处理,不幸的是这些错误非常普遍。

1
谢谢回复。但是当我从“app”模块调用本地库时,应用程序并没有崩溃。我已经添加了日志。我确实得到了崩溃日志。但是没有有用的信息(因为停止的位置是方法的结尾)。 :( - SKK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接