java opencv4 so文件,java.lang.UnsatisfiedLinkError:dlopen失败:库“ libopencv_java3.so”;未找到...

I am working on an android app that is supposed to detect if a face is in front of the camera and then perform some action based on it. I am using open cv for the face detection but I need some costume cpp functionality. So I am trying to import the open cv stuff into my own cpp file myLib.cpp. I then want to call the function defined in myLib in my mainActivity.

When I build the project everything works fine but as soon as I run it on my device (Oneplus x - Android 22) it immediately crashes with the following error message.

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.(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)

my opencv build.gradle

apply plugin: 'com.android.library'

android {

compileSdkVersion 27

defaultConfig {

minSdkVersion 15

targetSdkVersion 27

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

externalNativeBuild {

cmake {

cppFlags "-frtti -fexceptions"

abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'

}

}

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

externalNativeBuild {

cmake {

path "CMakeLists.txt"

}

}

sourceSets {

main {

jni.srcDirs = [jni.srcDirs, 'src/sdk/native/jni/include']

jniLibs.srcDirs = [jniLibs.srcDirs, 'src/sdk/native/3rdparty/libs', 'src/sdk/native/libs']

}

}

}

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support:appcompat-v7:27.1.1'

testImplementation 'junit:junit:4.12'

androidTestImplementation 'com.android.support.test:runner:1.0.1'

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

}

my 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})

The problem is that the libopencv_java3.so does not get created in my build. So the problem must be in the CMakeLists.txt of the opencv project. Does anyone know how to export the libopencv_java3.so file into my app build?

解决方案

You have to install OpenCV Manager on your device.

And initiate manager like this

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);

BaseLoaderCallback is

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;

}

}

};

`java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path` 这个错误通常是在Java程序运行时发生的,它表明Java程序在尝试加载一个本地时未能找到对应的文件。在这个错误信息中,`opencv_java460` 指的是OpenCV的一个版本号,代表了OpenCV Java接口的版本。 具体来说,这个错误可能发生在以下几种情况: 1. 文件名错误:确保你尝试加载的本地文件名(不含扩展名)与你在Java代码中使用的名称完全一致。例如,如果你在Java代码中使用了`System.loadLibrary("opencv_java460")`,那么实际的文件名(位于`java.library.path`指定的路径下)应该是一个类似`opencv_java460.dll`(在Windows上)或`libopencv_java460.so`(在Linux上)的名称。 2. 文件路径错误:检查你的`java.library.path`系统属性或环境变量是否包含了正确指向包含`opencv_java460`文件的路径。 3. 文件未安装或损坏:确认你已经正确安装了OpenCVJava,并且文件没有损坏或者没有被意外删除。 解决这个问题通常包括以下步骤: 1. 确认文件是否存在,并且文件名与你代码中指定的名称完全一致。 2. 确保`java.library.path`包含正确的路径,可以使用`System.setProperty("java.library.path", "路径")`在Java代码中设置,或者在运行Java程序前设置环境变量`JAVA_LIBRARY_PATH`。 3. 如果文件是动态链接(如DLL、SO文件),检查你的操作系统和Java虚拟机是否支持使用该
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值