使用NDK构建时,在OpenCV / nonfree / features2d中未定义

时间:2012-10-13 07:53:21

标签: android opencv android-ndk

当我使用ndk-build时,我总是遇到这个错误,奇怪地指向opencv库代码。

这是我收到的错误消息:

./obj//armeabi/objs/QRCA/QRCA.o: In function `~SURF`:
/----Path---/../sdk/native/jni/include/opencv2/nonfree/features2d.hpp:107: undefined reference to `vtable for cv::SURF`
/----Path---/../sdk/native/jni/include/opencv2/nonfree/features2d.hpp:107: undefined reference to `VTT for cv::SURF`
./obj/local/armeabi/objs/QRCA/QRCA.o: In function `fmatch(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >):`
/----Path---/jni/QRCA.cpp:28: undefined reference to `cv::SURF::SURF(double, int, int, bool, bool)`
/----Path---/jni/QRCA.cpp:36: undefined reference to `cv::SURF::SURF()`
./obj/local/armeabi/objs/QRCA/QRCA.o: In function `std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >::_M_range_check(unsigned int) const:`
~/Downloads/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_vector.h:780: undefined reference to `vtable for cv::SURF`
~/Downloads/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_vector.h:780: undefined reference to `VTT for cv::SURF`

这是我的Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include ../sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := QRCA
LOCAL_SRC_FILES := QRCA.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS +=  -llog -ldl
LOCAL_WHOLE_STATIC_LIBRARIES := gnustl_static

include $(BUILD_SHARED_LIBRARY)

非常感谢任何建议!

2 个答案:

答案 0 :(得分:1)

请先问谷歌,然后再提问。这是答案:

http://answers.opencv.org/question/445/242-android-missing-nonfree-package/

答案 1 :(得分:1)

我遇到了同样的问题,发现了这个: http://web.guohuiwang.com/technical-notes/sift_surf_opencv_android(在另一次检查之后,在上面链接的评论中提到了)

这是如何进行设置,以便NDK可以使用非自由功能。

一般来说,我们的想法是从其他发行版中复制标题/代码,然后编译自己的libnonfree.so以使用这些功能。

我现在在开发环境中遇到困难,所以我不确定它有多容易,但它似乎已经更新并且是解决方案的良好来源。

(我添加了这个答案,以便它写在与问题相同的页面上,人们不必去其他网站并浏览评论以找到它)