2012-10-13 48 views
1

當我使用ndk-build時,我總是得到這個奇怪地指向opencv庫代碼的錯誤。在使用NDK構建時在OpenCV/nonfree/features2d中未定義

這是我得到的錯誤信息:

./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) 

任何建議,非常感謝!

回答

1
+0

謝謝回答(以便它寫在這裏的同一頁上的問題,人們將不必去其它網站,並通過滾動的意見,找到它,我加入這個答案)。我讀過這篇文章,並且我明白opencv4android中沒有非free包。我想要做的是使用OpenCV本機庫編寫C++代碼,該庫具有非自由包,然後使用NDK爲Android構建。所以我不能這樣做,我可以 –

+0

不,你不能。等待OpenCV的解決方案。 – ArtemStorozhuk

+0

有沒有我們可以使用的預編譯的「libnonfree.so」? – Taiko

1

我遇到了同樣的問題,發現這個: http://web.guohuiwang.com/technical-notes/sift_surf_opencv_android

(其另一個檢查之後,在上面的鏈接評論中提到)是步行通過上如何設置它以便NDK可以使用非自由功能。

通常,這個想法是從其他發行版複製頭文件/代碼,然後編譯自己的libnonfree.so以使用這些功能。

我現在在我的開發環境中遇到了困難,所以我不確定它是多麼容易,但它似乎被更新並且是解決方案的良好來源。