Проект Android Compiling с OpenCl на MacOs - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь интегрировать пример Использовать OpenCL в приложении для Android на основе предварительного просмотра камеры в AndroidStudio 3.4 на MacOs Mojave.

Проблема

Я заканчиваю ошибками на классах стандартных библиотек, которые не найдены:

  • в cl.hpp файле atomic не найден
In file included from <project_path>/app/src/main/cpp/CLprocessor.cpp:7:
<opencl_lib_path>/CL/cl.hpp:176:10: fatal error: 'atomic' file not found
#include <atomic>
         ^~~~~~~~
1 warning and 1 error generated.
  • in CLprocessor.cpp string, vector и extension не могут быть разрешены.

CLprocessor.cpp было найдено здесь

Что я сделал

  1. Я взял код для учебника (нашел здесь )
  2. Я скачал заголовки для OpenCl, нашел здесь
  3. Я скачал cl.hpp здесь
  4. Я обновил CMakelist.txt

CMakeList

В моем CMakelist.txt я добавил пути к

  • OpenCV
  • заголовки OpenCL и cl.hpp файл

У меня также была проблема с сужением типов, я решил ее, добавив set(CMAKE_CXX_FLAGS "-Wc++11-narrowing")

В конце мой CmakeLists выглядит следующим образом:

# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.6)

# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

set(target mixed_sample)
project(${target} CXX)

# Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
# "OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
# provides a separate development package or SDK, be sure it has been
# installed.
set(OpenCV_DIR "<path_to_lib>/OpenCV-android-sdk/sdk/native/jni/")
message(STATUS "+++ OpenCV_DIR: " ${OpenCV_DIR})

# OpenCl
set(OpenCL_HEADER_CL "<path_to_lib>/OpenCL-Headers-master")
message(STATUS "+++ OpenCL_HEADER: " ${OpenCL_HEADER_CL})
include_directories( ${OpenCL_HEADER_CL} )

set(ANDROID_OPENCV_COMPONENTS "opencv_java" CACHE STRING "")
message(STATUS "ANDROID_ABI=${ANDROID_ABI}")
find_package(OpenCV REQUIRED COMPONENTS ${ANDROID_OPENCV_COMPONENTS})

file(GLOB srcs *.cpp *.c)
file(GLOB hdrs *.hpp *.h)

# fix error: non-constant-expression cannot be narrowed from type 'int' to 'size_t' (aka 'unsigned long') in initializer list [-Wc++11-narrowing]
set(CMAKE_CXX_FLAGS "-Wc++11-narrowing")

include_directories("${CMAKE_CURRENT_LIST_DIR}")
add_library(${target} SHARED ${srcs} ${hdrs})
target_link_libraries(${target} ${ANDROID_OPENCV_COMPONENTS} -lGLESv2 -lEGL -lOpenCL)

Вопрос

У меня такое ощущение, что проблема гораздо глубже, чем просто отсутствие некоторых библиотек, поэтому я ищу, как заставить OpenCl работать над проектом Android на MacOs, но я не смог найти никакой информации.

Кто-нибудь может подсказать мне правильный путь, чтобы получить эту работу?

Примечания

OpenCV

Я использую OpenCv4.1.0 для Android найдено здесь и OpenCV добавлен в качестве модуля в моем проекте Android. Работали следующие коды, данные OpenCV:

Gradle

Я новичок в проблемах OpenCV, OpenCL, поэтому я не знаю, уместно ли это, но мой build.gradle:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.aklal.andropencpp"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
                arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.1'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation project(':opencv410')
}

Структура проекта

Все коды cpp и CMakeList.txt находятся под /src/main/cpp, а не в папке jni, как в коде, предоставленном OpenCv. Этот способ использования файла cpp сработал, когда я попробовал другой код OpenCv с файлами cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...