Referencia indefinida a 'cv :: initModule_nonfree ()' en Android

Quiero crear una aplicación de Android que use BOW + SVM en nativo (usando C ++) para predecir. Lamentablemente tengo problemas con la construcción de la parte nativa. Como el módulo no libre no está incluido en el OpenCV SDK para Android, necesito construir el módulo yo mismo, usandoeste tutorial. Parece que construí el archivo .so con éxito. Aquí está la salida:

[armeabi-v7a] Prebuilt       : libopencv_java.so <= /home/crash-id/Development/SDK/OpenCV-2.4.9-android-sdk/sdk/native/jni/../libs/armeabi-v7a/
[armeabi-v7a] SharedLibrary  : libnonfree.so
[armeabi-v7a] Install        : libnonfree.so => libs/armeabi-v7a/libnonfree.so
[armeabi-v7a] Install        : libopencv_java.so => libs/armeabi-v7a/libopencv_java.so

Entonces, el problema viene aquí, cuando tengo que agregar este archivo .so a mi proyecto. Agregué libnonfree.so a mi carpeta jni. Luego edité el Android.mk. Aquí proporciono mis archivos .mk.

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := nonfree_prebuilt
LOCAL_SRC_FILES := libnonfree.so
include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES   := on
OPENCV_INSTALL_MODULES  := on

include /home/crash-id/Development/SDK/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk
#LOCAL_SHARED_LIBRARIES := nonfree_prebuilt #if I add this, it says undefined reference for everything in the cv namespace.
LOCAL_SRC_FILES  := SVMDetector.cpp
LOCAL_MODULE     := svm_detector

LOCAL_C_INCLUDES        += /home/crash-id/Development/SDK/OpenCV-2.4.9-android-sdk/sdk/native/jni/include

LOCAL_CFLAGS            := -Werror -O3 -ffast-math 
LOCAL_LDLIBS            += -llog -ldl 

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions

APP_ABI := armeabi-v7a

APP_PLATFORM := android-15

Pero esto no funciona. Cuando intento compilar la aplicación, aparece el siguiente error:

./obj/local/armeabi-v7a/objs/svm_detector/SVMDetector.o: in function Java_org_elsys_thesisdiploma_cammect_FrameProcess_SVMDetect:jni/SVMDetector.cpp:23: error: undefined reference to 'cv::initModule_nonfree()'

Cuando hago clic en el botón derechoinitModule_nonfree();, Eclipse abre el archivo nonfree.hpp y aquí está su contenido:

#ifndef __OPENCV_NONFREE_HPP__
#define __OPENCV_NONFREE_HPP__

#include "opencv2/nonfree/features2d.hpp"

namespace cv
{

CV_EXPORTS_W bool initModule_nonfree();

}

#endif

Pero no estoy seguro de que el vinculador sepa dónde está la implementación de este método. Como da un error, no lo hace.

EDITAR

Si agregoLOCAL_ALLOW_UNDEFINED_SYMBOLS := true, el proyecto se compila correctamente pero causa un error de tiempo de ejecución:

 02-17 00:15:58.197: E/AndroidRuntime(8793): FATAL EXCEPTION: main
02-17 00:15:58.197: E/AndroidRuntime(8793): Process: com.example.cammect, PID: 8793
02-17 00:15:58.197: E/AndroidRuntime(8793): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN2cv18initModule_nonfreeEv" referenced by "libsvm_detector.so"...

¿Sabes qué estoy haciendo mal? ¡Gracias por adelantado!

Respuestas a la pregunta(2)

Su respuesta a la pregunta