我正在尝试为Android编译OpenCV 2.4.9核心模块(c ++源代码)。我试图在Windows 8(64位机器)上使用Eclipse / Android NDK来做这件事。我对OpenCV核心模块(c ++代码)进行了一些修改,并希望在android上构建/测试它。以下是我到目前为止采取的步骤:
Application-14.mk 文件内容:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
APP_PLATFORM := android-14
Android.mk 文件内容:
LOCAL_PATH := $(call my-dir)
LINKED_FILES_SRC := ../../../Shared/OpenCV249/modules/core
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_core
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_C_INCLUDES += $(LINKED_FILES_SRC)/src
LOCAL_C_INCLUDES += $(LINKED_FILES_SRC)/include
LOCAL_SRC_FILES := $(LINKED_FILES_SRC)/src/tables.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/system.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/stat.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/rand.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/persistence.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/parallel.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/out.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/opengl_interop_deprecated.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/opengl_interop.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/matrix.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/matop.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/matmul.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/mathfuncs.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/lapack.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/gpumat.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/glob.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/gl_core_3_1.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/dxt.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/drawing.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/datastructs.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/copy.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/convert.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/cmdparser.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/array.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/arithm.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/alloc.cpp
LOCAL_SRC_FILES += $(LINKED_FILES_SRC)/src/algorithm.cpp
include $(BUILD_SHARED_LIBRARY)
这是我尝试构建
时的输出C:\droidev\android-ndk-r10c\ndk-build.cmd -w all
make.exe: Entering directory `C:/Projects/Enterprise/MobileServices/UM/Android/opencv_core'
[armeabi] Compile++ thumb: opencv_core <= tables.cpp
In file included from jni/../../../Shared/OpenCV249/modules/core/src/tables.cpp:49:0:
jni/../../../Shared/OpenCV249/modules/core/src/precomp.hpp:48:33: fatal error: opencv2/core/core.hpp: No such file or directory
make.exe: Leaving directory `C:/Projects/Enterprise/MobileServices/UM/Android/opencv_core'
compilation terminated.
make.exe: *** [obj/local/armeabi/objs/opencv_core/__/__/__/Shared/OpenCV249/modules/core/src/tables.o] Error 1
以下是上面输出中引用的文件的位置。
C:\Projects\Enterprise\MobileServices\UM\Shared\OpenCV249\modules\core\include\opencv2\core\core.hpp
C:\Projects\Enterprise\MobileServices\UM\Shared\OpenCV249\modules\core\src\precomp.hpp
C:\Projects\Enterprise\MobileServices\UM\Shared\OpenCV249\modules\core\src\tables.cpp
以下是precomp.hpp
中与错误相关的行:
#include "opencv2/core/core.hpp"
因此,core.hpp
与precomp.hpp 相关,因此无法找到opencv2/core/core.hpp
。我通常在Visual Studio中工作,当您为c ++项目配置包含目录时,它的行为有所不同(例如,如果我将C:\Projects\Enterprise\MobileServices\UM\Shared\OpenCV249\modules\core\include
作为附加的包含目录,则不会发生上述错误)。我试过移动文件(和文件的副本),但由于include指令在OpenCV源文件中的方式,我解决了这个特定的错误后遇到其他错误。我还尝试了我能想到的LOCAL_C_INCLUDES
变量的每个组合,因为它与include目录有关。
有谁知道如何更好地描述在我的makefile中搜索包含文件/目录的位置?我应该在makefile中以不同的方式配置包含吗?任何人都知道如何获得“Visual Studio like”包括我上面提到的功能?
答案 0 :(得分:0)
我能够在以下更正后进行编译:
这是 Android.mk 所有更改(这是为我编译的,但我还没有测试过该库):
##############################################################
# Setup Paths
##############################################################
LOCAL_PATH := $(call my-dir)
APP_PROJECT_PATH:= $(realpath .)
CORE_ROOT := $(APP_PROJECT_PATH)/../../Shared/OpenCV249/modules/core
DYNAMICCUDA_ROOT:= $(APP_PROJECT_PATH)/../../Shared/OpenCV249/modules/dynamicuda
ZLIB_ROOT := $(APP_PROJECT_PATH)/../../Shared/OpenCV249/3rdparty/zlib
##############################################################
# zlib module configuration
##############################################################
include $(CLEAR_VARS)
LOCAL_MODULE := zlib
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/zlib
LOCAL_SRC_FILES := $(ZLIB_ROOT)/adler32.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/compress.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/crc32.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/deflate.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/gzclose.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/gzlib.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/gzread.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/gzwrite.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/infback.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/inffast.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/inflate.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/inftrees.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/trees.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/uncompr.c
LOCAL_SRC_FILES += $(ZLIB_ROOT)/zutil.c
include $(BUILD_STATIC_LIBRARY)
##############################################################
# opencv_core module configuration
##############################################################
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_core
LOCAL_STATIC_LIBRARIES := zlib
LOCAL_C_INCLUDES:= $(LOCAL_PATH)
LOCAL_C_INCLUDES+= $(CORE_ROOT)/src
LOCAL_C_INCLUDES+= $(CORE_ROOT)/include
LOCAL_C_INCLUDES+= $(DYNAMICCUDA_ROOT)/src
LOCAL_C_INCLUDES+= $(DYNAMICCUDA_ROOT)/include
LOCAL_SRC_FILES := $(CORE_ROOT)/src/algorithm.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/alloc.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/arithm.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/array.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/cmdparser.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/convert.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/copy.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/datastructs.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/drawing.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/dxt.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/gl_core_3_1.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/glob.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/gpumat.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/lapack.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/mathfuncs.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/matmul.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/matop.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/matrix.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/opengl_interop.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/opengl_interop_deprecated.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/out.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/parallel.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/persistence.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/rand.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/stat.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/system.cpp
LOCAL_SRC_FILES += $(CORE_ROOT)/src/tables.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)