OpenCv con Android Studio 2.2+ usando nuevo gradel con cmake – referencia indefinida

Tengo problemas para usar OpenCv nativo 3.0.0 con Android Studio 2.2, con el nuevo soporte de ndk, es decir, el script de compilación de usak CMAKE. A continuación se muestra el error que estoy recibiendo. ¿Me falta algo en mi archivo gradel o cmake? Por favor hagamelo saber.

Error: FALLA: La generación falló con una excepción.

  • Lo que salió mal: La ejecución falló para la tarea ': app: externalNativeBuildDebug'.

    Error al generar el comando. Error al ejecutar 'C: \ Users \ Usuario \ AppData \ Local \ Android \ sdk \ cmake \ 3.6.3155560 \ bin \ cmake.exe con argumentos {–build E: \ OpenCvAndroid \ OPecvTry2CSupport \ app.externalNativeBuild \ cmake \ Debug \ mips64 –target native-lib} [1/1] Enlace de la biblioteca compartida de CXX. \ Obj \ mips64 \ libnative-lib.so FALLO: cmd.exe / C "cd. && C: \ Users \ User \ AppData \ Local \ Androide \ sdk \ ndk-bundle \ toolchains \ llvm \ prebuilt \ windows-x86_64 \ bin \ clang ++. Android / sdk / ndk-bundle / toolschains / mips64el-linux-android-4.9 / preinstalado / windows-x86_64 –sysroot = C: / Usuarios / Usuario / AppData / Local / Android / sdk / ndk-bundle / 21-arch-mips64 -fPIC -g -DANDROID -función-secciones -funwind-tablas -file-protector-fuerte -no-canonical-prefixes -Wa, – noexecstack -Wformat -Werror = formato-seguridad -fno-exceptions – Fno-rtti -O0 -fno-limit-debug-info -Wl, – build-id -Wl, – warn-shared-textrel -Wl, – fatal-warnings -Wl, – no-undefined -Wl, -z, noexecstack -Qunused-arguments -Wl, -z, relro -Wl, -z, ahora -shared -Wl, -soname, libnative-lib.so -o .. \ obj \ mips64 \ libnative-lib.so CMakeFiles / native-lib.dir / src /main/cpp/native-lib.cpp.o -llog -lm "C: / Usuarios / Usuario / AppData / Local / Android / sdk / ndk-bundle / sources / cxx-stl / gnu-libstdc ++ / 4.9 / libs / Mips64 / libgnustl_static.a "&& cd." CMakeFiles / native-lib.dir / src / main / cpp / nativo-lib.cpp.o: En la función ~Mat': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:278: undefined reference to Undefined ~Mat': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:278: undefined reference to cv :: fastFree (void *) 'CMakeFiles / native-lib.dir / src / principal / cpp / native-lib.cpp.o: En la función cv::Mat::release()': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:367: undefined reference to cv :: Mat :: deallocate () 'clang ++. Exe: error: el comando de vinculación falló con el código de salida 1 (use – V para ver la invocación) ninja: build stopped: falló el subcomando.

Y mi Cmake.txt

  cmake_minimum_required(VERSION 3.4.1) add_library( native-lib SHARED src/main/cpp/native-lib.cpp ) include_directories(E\:\\OpenCVSdk\\sdk\\native\\jni\\include ) find_library( log-lib log ) target_link_libraries(native-lib ${log-lib} ) 

Y mi archivo Gradel Build

  { apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "viki.opecvtry2csupport" minSdkVersion 16 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "" } } } 

He solucionado mi problema mediante la adición de "lib_opencv" lib a target_link_libraries

 target_link_libraries( native-lib lib_opencv #Just add the lib_opencv ${log-lib} ) 

No olvides vincular a Gradle a tu biblioteca nativa

Mi completo CMakeList.txt

 cmake_minimum_required(VERSION 3.4.1) add_library( native-lib SHARED src/main/cpp/native-lib.cpp ) find_library( log-lib log ) target_link_libraries(native-lib lib_opencv ${log-lib} ) set(CMAKE_VERBOSE_MAKEFILE on) add_library(lib_opencv SHARED IMPORTED) set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION /ProjectName/openCVLibrary320/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so) include_directories(/OpenCV-android-sdk/sdk/native/jni/include) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 

Configuración OpenCV_DIR ha funcionado para mí con OpenCV 3.1 y AS 2.2 y el último plugin de Gradle. Este es el bit relevante de mi CMakeLists.txt.

 cmake_minimum_required(VERSION 3.6) SET(OpenCV_DIR $ENV{HOME}/AndroidDevelopment/opencv-3.1.0/sdk/native/jni) find_package(OpenCV REQUIRED) message(STATUS "opencv found: ${OpenCV_LIBS}") include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${OpenCV_DIR}/include/) [...] target_link_libraries(myTarget log ${OpenCV_LIBS} mz android ) 
  • Cómo encontrar las esquinas de un objeto Rect en openCV?
  • Android-opencv conversión mat a escala de grises con el uso de matToBitmap / bitmapToMat
  • Captura de vista previa de la cámara para su uso en OpenCV. Conversión a RGB y Mat Gris. Java. Androide
  • Detecta el movimiento de una persona e identifica sus partes del cuerpo moviéndose hacia la cámara en Android
  • Error: 'to_string' no es un miembro de 'std'
  • Comparación de imágenes de OpenCV en Android
  • Android + OpenCV: Cómo configurar la resolución de la cámara cuando se utiliza CameraBridgeViewBase
  • Tamaños de imagen compatibles con webcam
  • OpenCV en Android con Eclipse
  • ¿Cómo reducir los partidos en el reconocimiento de patrones de OpenCV?
  • Android - openCV, obtener parte de la imagen - comportamiento extraño
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.