Android jni 和 opencv 运行时无法加载库



最近我正在用opencv编写用于图片处理的android JNI代码。当我将C++代码移植到JNI时,编译时没有错误,但当我在手机上运行代码时,程序总是崩溃。logcat显示

'由:java.lang.UnsisfiedLinkError:无法加载库:link_image[1892]:无法为'libmixed_sample.so'加载所需的库'libopencv.java.so'(load_library[1094]:找不到库'libopen v_java.so')'。

这个错误意味着没有libopencv_java.so库,所以我将.so复制到JNI文件夹中,然后再次运行,再次出现相同的运行时错误。

我搜索问题的答案,发现‘添加

System.loadLibrary("opencv_java")

到java代码'可能会解决这个问题。我试过了,运行时错误变为

'由java.lang.UnsisfiedLinkError:无法加载opencv_java:查找库返回null'引起。

我很困惑。我搜索并尝试了许多方法来解决这个问题,但都不起作用。

有人知道这个办法吗?

非常感谢!

libopencv_java.so库不应该在JNI文件夹中。要从APK自动安装,请将其放在Android项目的libs/armeabi子目录中。诀窍是,如果您的项目具有自定义的JNI代码,则在ndk-build期间将清除此目录。因此,您应该添加

LOCAL_PREBUILT_SHARED_LIBRARIES += ocvj
…
include $(CLEAR_VARS)
LOCAL_MODULE:= ocvj
LOCAL_SRC_FILES := $(FOO_PATH)/libopencv_java.so
include $(PREBUILD_SHARED_LIBRARY)

也许,你需要添加更多的库。也许,你用armeabi-v7a而不是armeabi。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include ../../sdk/native/jni/OpenCV.mk
LOCAL_MODULE    := mixed_sample
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_SHARED_LIBRARY)

非常感谢。

您必须构建OpenCV 的共享库

OPENCV_LIB_TYPE:=SHARED
OPENCV_PATH:=C:PATH_TO_JNIOpenCV.mk
$(info $(LOCAL_SRC_FILES))
include $(OPENCV_PATH)
include $(BUILD_SHARED_LIBRARY)

最新更新