Undefined Verweis auf 'cv :: initModule_nonfree ()' in Android

Ich möchte eine Android-App erstellen, die BOW + SVM in native (mit C ++) für die Vorhersage verwendet. Leider habe ich Probleme beim Erstellen des nativen Teils. Da das unfreie Modul nicht im OpenCV SDK für Android enthalten ist, muss ich das Modul selbst mit @ erstelledieses Tutorial. Es scheint, dass ich die .so-Datei erfolgreich erstellt habe. Hier ist die Ausgabe:

[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

So kommt das Problem hier, wenn ich diese .so-Datei meinem Projekt hinzufügen muss. Ich habe libnonfree.so zu meinem jni-Ordner hinzugefügt. Dann habe ich die Android.mk bearbeitet. Hier stelle ich meine .mk-Dateien zur Verfügung.

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

Aber das funktioniert nicht. Wenn ich versuche, die App zu erstellen, wird folgende Fehlermeldung angezeigt:

./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()'

Wenn ich mit der rechten Maustaste auf @ klicinitModule_nonfree();, Eclipse öffnet die nonfree.hpp-Datei und hier ist der Inhalt:

#ifndef __OPENCV_NONFREE_HPP__
#define __OPENCV_NONFREE_HPP__

#include "opencv2/nonfree/features2d.hpp"

namespace cv
{

CV_EXPORTS_W bool initModule_nonfree();

}

#endif

Aber ich bin nicht sicher, ob der Linker weiß, wo die Implementierung dieser Methode ist. Da es einen Fehler gibt, tut es das nicht.

BEARBEITE

Wenn ich @ hinzufüLOCAL_ALLOW_UNDEFINED_SYMBOLS := true, das Projekt wird erfolgreich kompiliert, verursacht jedoch einen Laufzeitfehler:

 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"...

Weißt du was ich falsch mache? Danke im Voraus

Antworten auf die Frage(4)

Ihre Antwort auf die Frage