解决android studio3 导入opencv后ndk-build编译遇到的问题

感谢将opencv4集成到android studio3.0平台,这个文章,帮助我解决了问题。

1NDK编译版本问题

android studio3 用ndk-build编译时会遇到如下问题

/build/core/add-application.mk:178: *** Android NDK: APP_STL gnustl_shared is no longer supported. Please switch to either c++_static or c++_shared. See https://developer.android.com/ndk/guides/cpp-support.html for more information.    .  Stop.

这是因为android studio3中的NDK版本太高,NDK16之后就不支持gnustl_shared的编译了,所以按照上面这条提示,应该换成c++_static 或者 c++_shared编译

2 opencv代码问题

解决android studio3 导入opencv后ndk-build编译遇到的问题

如果你正在使用opencv中face-detection这个例子。解决了上面第一个问题之后,换用c++_shared编译编译发现如下保存:

[armeabi-v7a] SharedLibrary  : libface_detection.so
G:/software/android/projects/opencv/CameraTutorial/app/src/jni/haar_detect.cpp:39: 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: *** [G:/software/android/projects/opencv/CameraTutorial/app/src/obj/local/armeabi-v7a/libface_detection.so] Error 1

这是因为我使用的是opencv345,opencv是用的gnustl_shared编译的,所以代码会有各种报错。

解决办法是使用opencv4.0。从官网下载

解决android studio3 导入opencv后ndk-build编译遇到的问题

 

下面写个程序实验

这是我的文章,赶快尝试吧

android studio3导入opencv4人脸识别例程安卓项目工程