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

时间:2014-02-22 03:23:53

标签: java android c++ opencv android-ndk

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

'引起:java.lang.UnsatisfiedLinkError:无法加载库:link_image [1892]:无法为'libmixed_sample.so'加载所需的库'libopencv_java.so'(load_library [1094]:Library'libopencv_java.so'未找到)'。

错误意味着没有libopencv_java.so库,因此我将.so复制到JNI文件夹并再次运行并再次运行相同的运行时错误。

我搜索问题的答案,并找到'添加

的System.loadLibrary( “opencv_java”)

到java代码'可以解决问题。我试过了,运行时错误改为

'引起:java.lang.UnsatisfiedLinkError:无法加载opencv_java:find library返回null'。

我很困惑。我搜索并尝试了很多方法来解决这个问题,但是没有一个能够解决这个问题。

任何人都知道对此的修复?

非常感谢!

3 个答案:

答案 0 :(得分:0)

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。

答案 1 :(得分:0)

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)

非常感谢你。

答案 2 :(得分:0)

您必须构建一个OpenCV的共享库

OPENCV_LIB_TYPE:=SHARED
OPENCV_PATH:=C:\PATH_TO_JNI\OpenCV.mk
$(info $(LOCAL_SRC_FILES))
include $(OPENCV_PATH)
include $(BUILD_SHARED_LIBRARY)