开发配置环境:
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
解决方案(分三步):
- 将NDK版本由19改为16
参考链接:https://blog.csdn.net/u014159143/article/details/89011091 - 在app的build.gradle文件中添加如下代码:
defaultConfig {
... ...
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments '-DANDROID_STL=gnustl_static'
}
}
}
- Application.mk中。添加以下行
APP_STL:=gnustl_shared