Я импортирую код C ++ / OpenCV в приложение для Android с помощью NDK. Прежде всего, я должен сказать, что я не изучаю программирование, я просто начинающий разработчик, поэтому есть много вещей, которыми я не управляю (особенно вещи из кодирования).
Я использую QtCreator для своего кода C ++ / OpenCV, и я написал эту строку в моем Project.pro:
INCLUDEPATH += path/to/OpenCV/main/dir #OpenCV-3.1.0
LIBS += -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
Теперь я пытаюсь сделать «Привет, мир!» приложение только для того, чтобы быть уверенным, что я могу скомпилировать свои исходные коды C ++.
В соответствии с https://developer.android.com/ndk/guides/android_mk.html, Я написал этот простой файл Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myModule
LOCAL_CFLAGS += -I /path/to/OpenCV/main/dir
LOCAL_LDLIBS := -lopencv_core
LOCAL_SRC_FILES := bar.cpp
include $(BUILD_SHARED_LIBRARY)
В bar.cpp у меня есть:
#include <opencv2/core/core.hpp>
Просто для проверки того, что компилятор может найти источники. Когда я пытаюсь собрать свой собственный код C ++ / OpenCV с помощью ndk-build, я получаю:
non-system libraries in linker flags: -lopencv_core
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the current module
Я пытался использовать LOCAL_STATIC_LIBRARIES и LOCAL_SHARED_LIBRARIES, но безуспешно. Есть идеи?
P.S .:
Важно сказать, что я скомпилировал простой мир Hello, используя NDK (без всякого заголовка OpenCV), следуя этому примеру https://gist.github.com/gnuanu/252fd406f48f7da2c1c7.
Здесь есть пост Android.mk: как включить ffmpeg и Opencv, но у него нет ответов, и я не могу решить с помощью информации …
Во-первых, скачать OpenCV для Android. Если вы используете только OpenCV nativ, вам необходимо установить следующее в файле Android.mk:
LOCAL_PATH := $(call my-dir)
CVROOT := path_to_opencv/OpenCV-android-sdk/sdk/native/jni
include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include $(CVROOT)/OpenCV.mk
LOCAL_MODULE += myModule
LOCAL_C_INCLUDES += path_to_your_code/bar.h
LOCAL_SRC_FILES += path_to_your_code/bar.cpp
LOCAL_CFLAGS += -std=c++11 -frtti -fexceptions -fopenmp -w
LOCAL_LDLIBS += -llog -L$(SYSROOT)/usr/lib
LOCAL_LDFLAGS += -fopenmp
include $(BUILD_SHARED_LIBRARY)
Круто то, что OpenCV предоставляет make-файл OpenCV.mk, и вам не нужно ничего делать;)
Других решений пока нет …