C++ Android.mk-包含本机C++;遵守NDK

C++ Android.mk-包含本机C++;遵守NDK,c++,opencv,android-ndk,android.mk,C++,Opencv,Android Ndk,Android.mk,我正在使用NDK将C++/OpenCV代码导入Android应用程序。首先,我必须说,我没有编程方面的研究,我只是一个业余开发人员,所以有很多事情我没有管理(特别是编码之外的事情) 我将QtCreator用于我的C++/OpenCV代码,并在Project.pro中编写了这行代码: INCLUDEPATH += path/to/OpenCV/main/dir #OpenCV-3.1.0 LIBS += -lopencv_core -lopencv_highgui -lopencv_imgcode

我正在使用NDK将C++/OpenCV代码导入Android应用程序。首先,我必须说,我没有编程方面的研究,我只是一个业余开发人员,所以有很多事情我没有管理(特别是编码之外的事情)

我将QtCreator用于我的C++/OpenCV代码,并在Project.pro中编写了这行代码:

INCLUDEPATH += path/to/OpenCV/main/dir #OpenCV-3.1.0
LIBS += -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
现在,我尝试制作一个“hello World”应用程序,只需要确保我可以用C++源编译。 根据,我编写了这个简单的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)
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)
在bar.cpp中,我有:

#include <opencv2/core/core.hpp>
我尝试使用本地静态库和本地共享库,但没有成功。有什么想法吗


附言:

重要的是,我使用NDK(不包括任何OpenCV头)编译了一个简单的Hello world

这里有一篇帖子,但没有答案,我无法用信息解决…

首先,下载。如果您仅使用OpenCV nativ,则必须在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)
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提供了OpenCV.mk makefile,您无需做任何事情;)

谢谢你,巴什巴格!它现在工作得很好。我必须将Application.mk中的APP_STL参数从stlport_static更改为gnustl_shared,如本文所述。我不明白为什么,我不知道STL版本之间的区别,这就是业余XD的问题