Android java.lang.UnsatisfiedLinkError:dlopen失败:library";libopencv_java3.so“;找不到
我正在开发一个安卓应用程序,该应用程序应该能够检测摄像头前面是否有人脸,然后根据它执行一些动作。我使用开放式CV进行面部检测,但我需要一些服装C++功能。所以我尝试把OpenCV的东西导入我自己的C++文件<代码> MyLIB。然后,我想在我的Android java.lang.UnsatisfiedLinkError:dlopen失败:library";libopencv_java3.so“;找不到,android,c++,opencv,cmake,java-native-interface,Android,C++,Opencv,Cmake,Java Native Interface,我正在开发一个安卓应用程序,该应用程序应该能够检测摄像头前面是否有人脸,然后根据它执行一些动作。我使用开放式CV进行面部检测,但我需要一些服装C++功能。所以我尝试把OpenCV的东西导入我自己的C++文件 MyLIB。然后,我想在我的main活动中调用myLib中定义的函数 当我构建项目时,一切正常,但当我在我的设备(Oneplus x-Android 22)上运行它时,它立即崩溃,并显示以下错误消息: 04-12 10:28:38.494 11114-11114/? E/AndroidRun
main活动中调用myLib
中定义的函数
当我构建项目时,一切正常,但当我在我的设备(Oneplus x-Android 22)上运行它时,它立即崩溃,并显示以下错误消息:
04-12 10:28:38.494 11114-11114/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lunaticcoding.opencvtest, PID: 11114
java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java3.so" not found
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
at com.lunaticcoding.opencvtest.MainActivity.<clinit>(MainActivity.java:19)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1606)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access$900(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:139)
at android.app.ActivityThread.main(ActivityThread.java:5298)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
我的OpenCVCMakeLists.txt
:
cmake_minimum_required(VERSION 3.4.1)
set(OpenCV_DIR "/Users/lunaticcoding/Documents/OpenCV-android-sdk/sdk/native/jni")
find_package(OpenCV REQUIRED java)
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
include_directories(${OpenCV_INCLUDE_DIRS})
问题是,libopencv_java3.so
不能在我的构建中创建。因此,问题一定出在OpenCV项目的CMakeLists.txt
中。有人知道如何将libopencv_java3.so文件导出到我的应用程序版本中吗?您必须在设备上安装OpenCV Manager
然后像这样启动经理
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
BaseLoaderCallback是
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
看没有更好的办法了吗?如果我发布这个应用程序,每个人都必须下载opencv manager:S
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};