【问题标题】:opencv.hpp not found ? Android NDK未找到 opencv.hpp ?安卓NDK
【发布时间】:2015-06-22 02:41:59
【问题描述】:

我在jniLibs 目录中有所有预构建的 Open CV .so 文件,而我也有一些使用 OpenCV 的 C++ 文件。我有以下 Android.mkApplication.mk 脚本。

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= opencv-prebuilt
LOCAL_SRC_FILES:= ../jniLibs/$(TARGET_ARCH_ABI)/libopencv_java.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/build/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE     := AN
LOCAL_SRC_FILES  := A.cpp B.cpp
LOCAL_SHARED_LIBRARIES := opencv-prebuilt
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8

当我尝试编译时,为什么它一直给我错误no such directory or file found 并指向我的jni 目录中的#include <opencv2/opencv.hpp> 语句?

我看过另一个类似的问题here,但我无法通过解决方案解决它

【问题讨论】:

  • 你需要在你的LOCAL_INCLUDES中添加.hpp的路径,否则它不知道在哪里找到它。当然,radle 和 NDK 应该有问题,祝你好运。

标签: android c++ opencv android-studio android-ndk


【解决方案1】:

您应该只包含某些来源严格要求的头文件,即

#include <DetectionBasedTracker.h>
#include <opencv2/core/core.hpp>
#include <opencv2/contrib/detection_based_tracker.hpp>

考虑到您所引用的已接受答案作为您问题的可能解决方案作为参考,您应该在 app/build.grade 上设置放置 SO 文件的目录:

sourceSets.main {
    jniLibs.srcDir 'src/main/libs' //set .so files location to libs
    jni.srcDirs = [] //Disable automatic ndk-build call
}

tasks.withType(NdkCompile) {
    compileTask -> compileTask.enabled = false
}

尽管如此,我仍然会尝试在您的 Android.mk 中引用 OpenCV.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=off
OPENCV_LIB_TYPE:=STATIC
include /Users/egomez/dev/OpenCV4AndroidWorkspace/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk

希望对您有所帮助。

【讨论】:

  • 我收到一条错误消息Error:(23, 0) Could not find property 'NdkCompile' on com.android.build.gradle.AppExtension_Decorated@a550b6.
  • 谢谢,在我的 com.android.build.gradle.tasks.NdkCompile 中包含 com.android.build.gradle.tasks.NdkCompile; 后,我能够运行该应用程序;
  • @RomanticElectron 你能扩展修复吗?上面的修改你在哪里添加的?
  • @JParrish88 在同一个 gradle 构建文件的开头使用 import,如下所示:import com.android.build.gradle.tasks.NdkCompile;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多