неопределенная ссылка на `cv :: DescriptorMatcher :: knnMatch

Я пытаюсь использовать нативную библиотеку opencv в андроид-студийном проекте. Я получаю сообщение об ошибке по неопределенной ссылке для функции knnMatch.

Я добавил openCVLibrary в свой проект и успешно использовал другие функции openCV.

  1. Есть ли конкретные, почему использовать libopencv_features2d?
  2. Что такое правильный способ для компиляции и компоновки features2d?

ОБНОВЛЕНИЕ: Добавить мои файлы компиляции

Мое приложение build.gradle:

apply plugin: 'com.android.application'
//
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
//
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
...
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang" , "-DANDROID_STL=c++_static","-DCMAKE_BUILD_TYPE=Release", "-DANDROID_CPP_FEATURES=rtti exceptions"cppFlags    "-D__STDC_FORMAT_MACROS" , '-O3','-fopenmp','-fsigned-char', "-std=c++14", "-frtti", "-fexceptions", "-mfloat-abi=softfp", "-Wall"}
ndk {
abiFilters 'arm64-v8a'
}
}
}
//
externalNativeBuild {
cmake {
path "CMakeLists.txt"}
}
...
}
//
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
implementation project(':openCVLibrary340') //Module
}

Мой CMakeList.txt:

cmake_minimum_required(VERSION 3.4.1)
#
include_directories(/.../OpenCV-android-sdk/sdk/native/jni/include)
add_library( libopencv SHARED IMPORTED )
set_target_properties(libopencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)
#
FILE(GLOB CPP_SRC
"src/main/cpp/*.c""src/main/cpp/*.h""src/main/cpp/*.cpp""src/main/cpp/*.hpp")
#
add_library( myLib SHARED ${CPP_SRC} )
#
find_library( log-lib log )
#
target_link_libraries( myLib libopencv ${log-lib} )
target_link_libraries( myLib android log EGL GLESv2 )

В моем jniLibs -> arm64-v8a У меня есть эти cv библиотеки:

libopencv_calib3d.a, libopencv_core.a, libopencv_dnn.a,
libopencv_features2d.a libopencv_flann.a, libopencv_highgui.a,
libopencv_imgcodecs.a, libopencv_imgproc.a, libopencv_java3.so,
libopencv_ml.a, libopencv_objdetect.a, libopencv_photo.a,
libopencv_shape.a libopencv_stitching.a, libopencv_superres.a,
libopencv_video.a, libopencv_videoio.a, libopencv_videostab.a

Как я уже сказал, другие функции cv, такие как cv::solvePnP отлично работает
только KnnMatch бросить неопределенный.

ОБНОВЛЕНИЕ: если я удалю -DANDROID_STL=c++_shared Я могу собрать knnMatch но мне это нужно, какие-либо предложения?

3

Решение

Привет Это явно ошибка связи. При компиляции кода метод, на который вы ссылаетесь из внешней библиотеки, не может быть включен или связан. Во время компиляции компоновщик ищет ссылку на этот метод во всех библиотеках, и если он не может найти определение этого метода в библиотеках или файлах obj, он выдаст вам эту ошибку. Если вы используете make-файл, проверьте, правильно ли вы добавили в него нужную библиотеку. Также проверьте, установлена ​​ли в библиотеке переменная окружения path или нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]