c++ - Android.mk - 包含 OpenCV 目录,用于使用 NDK 进行 native C++ 编译

标签 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_imgcodecs -lopencv_imgproc

现在,我正在尝试制作一个“Hello World!” app 只是为了确保我可以使用我的 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 native 代码时,我得到:

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,但没有成功。有什么想法吗?


附言:

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

这里有帖子Android.mk: how to include ffmpeg and Opencv ,但它没有答案,我无法用信息解决...

最佳答案

首先,下载OpenCV for 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 提供了 OpenCV.mk 生成文件,您无需执行任何操作 ;)

关于c++ - Android.mk - 包含 OpenCV 目录,用于使用 NDK 进行 native C++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38104404/

相关文章:

c++ - 在 C++ 中销毁动态分配的内存(数组对象)

c++ - 我怎样才能使这个 "while"工作?

Android NDK API 列表?

带有 Linux : "ndk-build" command not found 的 Android NDK

c++ - 未知的应用程序错误

c++ - 如何使用指针 vector 实现类析构函数 C++

python - 如何使用 numpy 为图像的所有相对白色部分创建蒙版?

c++ - 如何为SVM训练OpenCV3形成数据

java - 如何制作人脸检测中侧面的xml文件

android - Android 上的可写和可执行位置