Неопределенная ссылка на 'cv :: initModule_nonfree ()' в Android

Я хочу создать приложение для Android, которое использует BOW + SVM на родном языке (используя C ++) для прогнозирования. К сожалению у меня проблема со сборкой родной части. Поскольку несвободный модуль не включен в OpenCV SDK для Android, мне нужно собрать его самостоятельно, используяэтот урок, Кажется, я успешно создал файл .so. Вот вывод:

[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 файл в мой проект. Я добавил libnonfree.so в мою папку jni. Затем я отредактировал Android.mk. Здесь я предоставляю свои файлы .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

Но это не работает. Когда я пытаюсь собрать приложение, я получаю следующую ошибку:

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

Когда я нажимаю правую кнопку наinitModule_nonfree();Eclipse открывает файл nonfree.hpp и вот его содержимое:

#ifndef __OPENCV_NONFREE_HPP__
#define __OPENCV_NONFREE_HPP__

#include "opencv2/nonfree/features2d.hpp"

namespace cv
{

CV_EXPORTS_W bool initModule_nonfree();

}

#endif

Но я не уверен, что компоновщик знает, где находится реализация этого метода. Так как это дает ошибку, это не так.

РЕДАКТИРОВАТЬ

Если я добавлюLOCAL_ALLOW_UNDEFINED_SYMBOLS := trueпроект успешно компилируется, но вызывает ошибку во время выполнения:

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

Вы знаете, что я делаю не так? Заранее спасибо!

Ответы на вопрос(0)

Ваш ответ на вопрос