Android.mk - 使用NDK进行本地C++编译时,包含OpenCV目录

3

我正在使用NDK将C++/OpenCV代码导入到Android应用程序中。首先,我必须说我没有编程学习经历,我只是一个业余开发者,因此有很多事情我不懂(特别是编码之外的事情)。

我在我的Project.pro文件中使用QtCreator来编写我的C++/OpenCV代码,并写下了这一行:

INCLUDEPATH += path/to/OpenCV/main/dir #OpenCV-3.1.0
LIBS += -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc

现在,我正在尝试创建一个“Hello World!”应用程序,只是为了确保我可以使用我的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>

只是为了检查编译器能否找到源代码。当我尝试使用ndk-build构建我的C++/OpenCV本地代码时,我遇到了以下问题:

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

重要的是要说,我使用NDK编译了一个简单的Hello world(不包括任何OpenCV头文件),按照这个例子 https://gist.github.com/gnuanu/252fd406f48f7da2c1c7

这里有一篇文章 Android.mk:如何包含ffmpeg和Opencv,但是它没有答案,我无法通过信息解决问题...

1个回答

6
首先,下载Android版OpenCV。如果您仅使用本机的OpenCV,则必须在您的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提供了OpenCV.mk makefile, 你不需要做任何事情 ;)

1
谢谢bashbug!现在它完美地工作了。我不得不像这篇文章中提到的那样,从stlport_static更改为gnustl_shared来更改我的Application.mk中的APP_STL参数。我不太明白为什么,也不知道STL版本之间的区别,这就是业余爱好者的问题XD。 - user3368457

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接