I am using OpenCV via JNI in my Android application. Libopencv_java.so is too big, about 7M. Apparently, I need only a few libraries. I check libraries in OpenCV4Android, discovering some static libraries such as libopencv_core.a Here is my new Android.mk code to enable the necessary OpenCV libraries. And I include libopencv_core.a, libopencv_highgui.a, libopencv_imgproc.a and some third-party libraries that are: liblibjasper.a, liblibjpeg.a, liblibpng.a, liblibtiff.a
include $(CLEAR_VARS) LOCAL_MODULE := libopencv_highgui_prebuilt LOCAL_SRC_FILES := libopencv_highgui.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libopencv_imgproc_prebuilt LOCAL_SRC_FILES := libopencv_imgproc.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libopencv_core_prebuilt LOCAL_SRC_FILES := libopencv_core.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := liblibjpeg_prebuilt LOCAL_SRC_FILES := liblibjpeg.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := liblibpng_prebuilt LOCAL_SRC_FILES := liblibpng.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := liblibtiff_prebuilt LOCAL_SRC_FILES := liblibtiff.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := liblibjasper_prebuilt LOCAL_SRC_FILES := liblibjasper.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := native_jni LOCAL_SRC_FILES := jni_part.cpp LOCAL_CFLAGS += -fpermissive LOCAL_STATIC_LIBRARIES += libopencv_highgui_prebuilt LOCAL_STATIC_LIBRARIES += libopencv_imgproc_prebuilt LOCAL_STATIC_LIBRARIES += libopencv_core_prebuilt LOCAL_STATIC_LIBRARIES += liblibjpeg_prebuilt LOCAL_STATIC_LIBRARIES += liblibpng_prebuilt LOCAL_STATIC_LIBRARIES += liblibtiff_prebuilt LOCAL_STATIC_LIBRARIES += liblibjasper_prebuilt LOCAL_LDLIBS += -llog -ldl LOCAL_LDLIBS += -ljnigraphics LOCAL_LDLIBS += -lz include $(BUILD_SHARED_LIBRARY)
But this does not happen during compilation. A long list of errors, all related to the statement are not executed:
/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 Install : 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
I also tried reordering these static libraries; But that does not work. Any suggestion?
source share