Android.mk — включает каталог OpenCV для собственной совместимости C ++ с NDK

Я импортирую код 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, но у него нет ответов, и я не могу решить с помощью информации …

2

Решение

Во-первых, скачать 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, и вам не нужно ничего делать;)

6

Другие решения

Других решений пока нет …