Używam Qt do napisania aplikacji na Androida, używając opencv. Przygotowałem wszystko, aby moja aplikacja działała poprawnie bez opencv. Jednak po tym, jak zawarłem opencv 3.2 (pobierając najnowszy sdk i ustawiając ścieżki biblioteki), kompilacja kończy się niepowodzeniem z setkami nieokreślonych błędów referencyjnych, wszystkie z nich obejmują carotene_o4t
.Co to jest karoten_o4t i dlaczego powoduje problemy z kompilowaniem programu przy użyciu opencv z Qt na Androida?
C:/opencv/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(arithm.cpp.o):arithm.cpp:function cv::hal::cmp8u(unsigned char const*, unsigned int, unsigned char const*, unsigned int, unsigned char*, unsigned int, int, int, void*): error: undefined reference to 'carotene_o4t::isSupportedConfiguration()'
C:/opencv/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(arithm.cpp.o):arithm.cpp:function cv::hal::cmp8u(unsigned char const*, unsigned int, unsigned char const*, unsigned int, unsigned char*, unsigned int, int, int, void*): error: undefined reference to 'carotene_o4t::cmpGE(carotene_o4t::Size2D const&, unsigned char const*, int, unsigned char const*, int, unsigned char*, int)'
C:/opencv/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(arithm.cpp.o):arithm.cpp:function cv::hal::cmp8u(unsigned char const*, unsigned int, unsigned char const*, unsigned int, unsigned char*, unsigned int, int, int, void*): error: undefined reference to 'carotene_o4t::cmpEQ(carotene_o4t::Size2D const&, unsigned char const*, int, unsigned char const*, int, unsigned char*, int)'
... i tak dalej.
Co to jest ta karoten_o4t i jak mogę rozwiązać ten problem? Po wyszukaniu tych wiadomości Google zwraca zero wyników.
plik projektu wygląda następująco:
INCLUDEPATH += C:/opencv/OpenCV-android-sdk/sdk/native/jni/include
OPENCV3RDPARTYLIBS = C:/opencv/OpenCV-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a
OPENCVNATIVELIBS = C:/opencv/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a
LIBS += $$OPENCV3RDPARTYLIBS/liblibtiff.a \
$$OPENCV3RDPARTYLIBS/liblibjpeg.a \
$$OPENCV3RDPARTYLIBS/liblibjasper.a \
$$OPENCV3RDPARTYLIBS/liblibpng.a \
$$OPENCV3RDPARTYLIBS/libtbb.a \
$$OPENCV3RDPARTYLIBS/libIlmImf.a
LIBS += $$OPENCVNATIVELIBS/libopencv_core.a \
$$OPENCVNATIVELIBS/libopencv_flann.a \
$$OPENCVNATIVELIBS/libopencv_imgproc.a \
$$OPENCVNATIVELIBS/libopencv_highgui.a \
$$OPENCVNATIVELIBS/libopencv_features2d.a \
$$OPENCVNATIVELIBS/libopencv_calib3d.a \
$$OPENCVNATIVELIBS/libopencv_ml.a \
$$OPENCVNATIVELIBS/libopencv_objdetect.a \
$$OPENCVNATIVELIBS/libopencv_photo.a \
$$OPENCVNATIVELIBS/libopencv_stitching.a \
$$OPENCVNATIVELIBS/libopencv_superres.a \
$$OPENCVNATIVELIBS/libopencv_video.a \
$$OPENCVNATIVELIBS/libopencv_videostab.a \
$$OPENCVNATIVELIBS/libopencv_java3.so \
$$OPENCVNATIVELIBS/libopencv_calib3d.a \
$$OPENCVNATIVELIBS/libopencv_imgcodecs.a \
$$OPENCVNATIVELIBS/libopencv_shape.a \
$$OPENCVNATIVELIBS/libopencv_videoio.a \
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
$$PWD/../../../../opencv/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_java3.so
}
Ścieżki sami zdają się być poprawne, ponieważ jeśli nie zawierają opencv.hpp w moim kodu, to działa doskonale. Z drugiej strony błędne ścieżki w plikach projektu uniemożliwiają jego zbudowanie.
cytat z [o] (https://github.com/opencv/opencv/tree/master/3rdparty/carotene): „Jest karoten, niski -poziomowa biblioteka zawierająca zoptymalizowane procedury CPU przydatne w komputerowych algorytmach wizyjnych. " Z tego żądania pullowania: [NVIDIA Carotene - NVIDIA Hardware-Abstraction-Layer dla platform ARM] (https://github.com/opencv/opencv/pull/6770) – Catree
Oznacza to, że jest to błąd w wersji 3.2 lub wersja 3.1 go nie używała, ponieważ nie mam takich problemów z 3.1. Chyba będę musiał sam skompilować 3.2 zamiast używać SDK. – vsz
Został wprowadzony w OpenCV 3.2. Powinieneś być w stanie wyłączyć karoten w [CMake] (https://github.com/opencv/opencv/blob/3.2.0/CMakeLists.txt#L174) podczas budowania OpenCV ze źródła. – Catree