Hi, I am having issues when building OpenCV and FastCV as static libs. Here is my Android.mk:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)OPENCV_CAMERA_MODULES:=onOPENCV_INSTALL_MODULES:=oninclude /Users/Razvan/Android/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mkUSE_OPENGL_ES_1_1 := falseifeq ($(USE_OPENGL_ES_1_1), true)OPENGLES_LIB := -lGLESv1_CMOPENGLES_DEF := -DUSE_OPENGL_ES_1_1elseOPENGLES_LIB := -lGLESv2OPENGLES_DEF := -DUSE_OPENGL_ES_2_0endifLOCAL_MODULE := drive_assistLOCAL_SRC_FILES += jni_part.cpp GridTracking.cpp CameraRendererRGB565GL2.cpp FastCVSampleRenderer.cpp CameraUtil.cppLOCAL_LDLIBS += -llog -ldl $(OPENGLES_LIB) -lfastcvLOCAL_CFLAGS += -Wno-write-strings $(OPENGLES_DEF) -ffast-math -O3 -fopenmp -funroll-loopsLOCAL_LDFLAGS +=-O3 -fopenmpLOCAL_CPPFLAGS := -O3 -flto -ffunction-sections -fdata-sectionsLOCAL_CPPFLAGS += -fvisibility=hidden -fvisibility-inlines-hiddenLOCAL_CPPFLAGS += -fomit-frame-pointer -funroll-loops -ffast-mathLOCAL_CPPFLAGS += -mfloat-abi=softfp -DFPM_ARM -DNDEBUGLOCAL_STATIC_LIBRARIES += libfastcvLOCAL_SHARED_LIBRARIES := liblog libGLESv2include $(BUILD_SHARED_LIBRARY)
I get weird undefined reference errors in the OpenCV native library, for example:
/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:353: error: undefined reference to 'cv::Mat::create(int, int const*, int)'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:278: error: undefined reference to 'cv::fastFree(void*)'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:278: error: undefined reference to 'cv::fastFree(void*)'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:278: error: undefined reference to 'cv::fastFree(void*)'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:367: error: undefined reference to 'cv::Mat::deallocate()'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:367: error: undefined reference to 'cv::Mat::deallocate()'/Users/Razvan/Android/OpenCV-2.4.11-android-sdk/sdk/native/jni/include/opencv2/core/mat.hpp:367: error: undefined reference to 'cv::Mat::deallocate()'
The strange thing is that if I remove the FastCV stuff, OPenCV will compile and work perfectly. I do NOT want to use dynamic linking and the OpenCV manager. Does anyone have any suggestions for my issue?
Thanks!
Can you please remove -lfastcv from LOCAL_LDLIBS += -llog -ldl $(OPENGLES_LIB) -lfastcv and try once?
In my opinion, we LOCAL_LDLIBS for system library dependencies. If we want to point to another library, it is better to use it only in LOCAL_STATIC_LIBRARIES and LOCAL_SHARED_LIBRARIES
The way it works is by modifying shared libs as follows:
LOCAL_SHARED_LIBRARIES += lopencv_java liblog libGLESv2