最近我用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'。
我很困惑。我搜索并尝试了很多方法来解决这个问题,但是没有一个能够解决这个问题。
任何人都知道对此的修复?
非常感谢!
答案 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)