2017-01-15 17 views
6

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.

+0

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

+0

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

+1

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

Odpowiedz

5

Musisz połączyć z libtegra_hal.

jest zawarte w katalogu 3rdParty: sdk/native/3rdparty/libs/armeabi/libtegra_hal.a