Android jni 和 opencv 运行时无法加载库
Android jni and opencv runtime couldn't load libs
最近我正在用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)
相关文章:
- 使用 sv hup SIGHUP 信号重新加载配置时出现问题
- 使用 TTF_RenderText() 加载字体时获取段错误 TTF_OpenFontRW()
- 是什么导致 glTexSubImage1D() - 加载纹理时在此示例中出现GL_INVALID_VALUE错误?
- QImage:加载图像时自动检测格式
- 使用 OpenGL 加载图像时0x69ABF340 STBI_Image引发异常
- dll 生成成功,但在加载 dll 时执行错误
- 使用动态加载库时静态变量为空
- 在FreesWitch中使用AWS C SDK加载模块时未定义的符号错误
- 在 Lua 中加载 C++ 模块时'Attempt to index a string value'错误
- 运行时动态加载库时出错"unresolved external symbol"
- 在加载页面时,如何为iwebbrowser2设置背景颜色
- 从 C 中的文件加载结构时出现分段错误
- Qml:从文件加载组件时将参数作为 URL 的一部分传递
- C++插件不能延迟加载dll时
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 英特尔SGX错误:8207错误是什么意思是当我无法正确加载飞地时
- 加载库时错误
- 保存/加载C++数据时出错
- 尝试使用 libpng 加载图像时在 Windows 上出现运行时错误
- 当使用运行时加载dll时,vc++可以共享库中的静态信息