gpt4 book ai didi

c++ - 对`cv::DescriptorMatcher::knnMatch 的 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:37 24 4
gpt4 key购买 nike

我正在尝试在 android studio 项目中使用 opencv native 库。我收到函数 knnMatch undefined reference 的错误。

我已将 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 但我需要它,有什么建议吗?

最佳答案

您好,这显然是一个链接错误。编译代码时,无法包含或链接您从​​外部库引用的方法。在编译过程中,链接器会在所有库中查找对该方法的引用,如果它在库或 obj 文件中找不到该方法定义,则会给出此错误。如果您使用的是 make 文件,请检查您是否已在其中正确添加了所需的库。还要检查库是否已设置为路径环境变量。

关于c++ - 对`cv::DescriptorMatcher::knnMatch 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com