如何在Android中仅包含必要的OpenCV库?

如何在Android中仅包含必要的OpenCV库?,第1张

概述我在 Android应用程序中通过JNI使用OpenCV. libopencv_java.so太大了,大约7M.显然,我只需要几个库. 我检查OpenCV4Android中的libs,找出一些静态库,比如libopencv_core.a 这是我在Android.mk中的新代码,包含必要的OpenCV库.我包括libopencv_core.a,libopencv_highgui.a,libopenc 我在 Android应用程序中通过JNI使用OpenCV.
libopencv_java.so太大了,大约7M.显然,我只需要几个库.
我检查OpenCV4AndroID中的libs,找出一些静态库,比如libopencv_core.a
这是我在AndroID.mk中的新代码,包含必要的OpenCV库.我包括libopencv_core.a,libopencv_highgui.a,libopencv_imgproc.a和一些第三方库,它们是:liblibjasper.a,liblibjpeg.a,liblibpng.a,liblibtiff.a
include $(CLEAR_VARS)LOCAL_MODulE := libopencv_highgui_prebuiltLOCAL_SRC_fileS := libopencv_highgui.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := libopencv_imgproc_prebuiltLOCAL_SRC_fileS := libopencv_imgproc.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := libopencv_core_prebuiltLOCAL_SRC_fileS := libopencv_core.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := liblibjpeg_prebuiltLOCAL_SRC_fileS := liblibjpeg.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := liblibpng_prebuiltLOCAL_SRC_fileS := liblibpng.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := liblibtiff_prebuiltLOCAL_SRC_fileS := liblibtiff.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := liblibjasper_prebuiltLOCAL_SRC_fileS := liblibjasper.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroIDSDKNativeJNI/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE    := native_jniLOCAL_SRC_fileS := jni_part.cppLOCAL_CFLAGS += -fpermissiveLOCAL_STATIC_liBRARIES += libopencv_highgui_prebuiltLOCAL_STATIC_liBRARIES += libopencv_imgproc_prebuiltLOCAL_STATIC_liBRARIES += libopencv_core_prebuiltLOCAL_STATIC_liBRARIES += liblibjpeg_prebuiltLOCAL_STATIC_liBRARIES += liblibpng_prebuiltLOCAL_STATIC_liBRARIES += liblibtiff_prebuiltLOCAL_STATIC_liBRARIES += liblibjasper_prebuiltLOCAL_LDliBS +=  -llog -ldlLOCAL_LDliBS += -ljnigraphicsLOCAL_LDliBS += -lzinclude $(BUILD_SHARED_liBRARY)

但它没有经过编译.一个长错误列表,所有与断言相关的失败:

/usr/src/androID-ndk-r8b/toolchains/arm-linux-androIDeabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androIDeabi/4.6.x-Google/../../../../arm-linux-androIDeabi/bin/ld: BFD (GNU Binutils) 2.21 assertion fail /usr/local/Google/home/andrewhsIEh/ndk-andrewhsIEh/src/build/../binutils/binutils-2.21/bfd/elf32-arm.c:10190Install        : libnative_jni.so => libs/armeabi-v7a/libnative_jni.so/usr/src/androID-ndk-r8b/toolchains/arm-linux-androIDeabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androIDeabi/4.6.x-Google/../../../../arm-linux-androIDeabi/bin/ld: BFD (GNU Binutils) 2.21 assertion fail /usr/local/Google/home/andrewhsIEh/ndk-andrewhsIEh/src/build/../binutils/binutils-2.21/bfd/elf32-arm.c:10190

我也试图改变这些静态库的顺序;但它不起作用.
有什么建议吗?

解决方法 静态库链接只会引入您在代码中实际使用的功能,而不是像.so一样引入整个库. 查看OpenCV AndroID示例项目,了解如何使用静态链接. 总结

以上是内存溢出为你收集整理的如何在Android中仅包含必要的OpenCV库?全部内容,希望文章能够帮你解决如何在Android中仅包含必要的OpenCV库?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1135527.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存