error: undefined reference to 'cv::CascadeClassifier::detectMultiScale

开发配置环境:

ndk :r19_x86_x64

opencv sdk :v3.4.3

android studio 3.2

报错如下:

Build command failed.
Error while executing process D:\android-ndk-r16-windows-x86_64\android-ndk-r16\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\19470\AndroidStudioProjects\mycv\app\src\main\jni\Android.mk NDK_APPLICATION_MK=C:\Users\19470\AndroidStudioProjects\mycv\app\src\main\jni\Application.mk APP_ABI=x86_64 NDK_ALL_ABIS=x86_64 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=C:/Users/19470/AndroidStudioProjects/mycv/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=C:\Users\19470\AndroidStudioProjects\mycv\app\build\intermediates\ndkBuild\debug\lib C:/Users/19470/AndroidStudioProjects/mycv/app/build/intermediates/ndkBuild/debug/obj/local/x86_64/libdetection_based_tracker.so}
Android NDK: OpenCV: You should ignore warning about 'non-system libraries in linker flags' and 'opencv_java' library.    
Android NDK:         'OPENCV_INSTALL_MODULES:=on' can be used to build APK with included OpenCV binaries    
Android NDK: WARNING:C:\Users\19470\AndroidStudioProjects\mycv\app\src\main\jni\Android.mk:detection_based_tracker: non-system libraries in linker flags: -lopencv_java3    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    
[x86_64] Compile++      : detection_based_tracker <= DetectionBasedTracker_jni.cpp
[x86_64] SharedLibrary  : libdetection_based_tracker.so

C:/Users/19470/AndroidStudioProjects/mycv/app/src/main/jni/DetectionBasedTracker_jni.cpp:36: error: undefined reference to 'cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::__ndk1::vector<cv::Rect_<int>, std::__ndk1::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size_<int>, cv::Size_<int>)'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [C:/Users/19470/AndroidStudioProjects/mycv/app/build/intermediates/ndkBuild/debug/obj/local/x86_64/libdetection_based_tracker.so] Error 1

解决方案(分三步):

  1. 将NDK版本由19改为16
    参考链接:https://blog.csdn.net/u014159143/article/details/89011091
  2. 在app的build.gradle文件中添加如下代码:
defaultConfig {
    ... ...
    externalNativeBuild {
        cmake {
            cppFlags "-std=c++11 -frtti -fexceptions"
            arguments '-DANDROID_STL=gnustl_static'
        }
    }
}
  1. Application.mk中。添加以下行
APP_STL:=gnustl_shared

参考链接:https://stackoverflow.com/questions/37370259/undefined-reference-to-cvcascadeclassifierdetectmultiscale-but-other-lib

发布了96 篇原创文章 · 获赞 56 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/104119602