Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.UnsatisfiedLinkError:dlopen失败:library";libopencv_java3.so“;找不到_Android_C++_Opencv_Cmake_Java Native Interface - Fatal编程技术网

Android java.lang.UnsatisfiedLinkError:dlopen失败:library";libopencv_java3.so“;找不到

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

我正在开发一个安卓应用程序,该应用程序应该能够检测摄像头前面是否有人脸,然后根据它执行一些动作。我使用开放式CV进行面部检测,但我需要一些服装C++功能。所以我尝试把OpenCV的东西导入我自己的C++文件<代码> MyLIB。然后,我想在我的
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)
我的OpenCV
CMakeLists.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;
            }
        }
    };