2014-03-07 11 views
5

ich damit jetzt für 2 Tage bin zu kämpfen und nicht bekommen, es zu arbeiten.Kreuz kompiliert opencv Projekt auf Ubuntu für Raspberry Pi

Was ich bisher getan habe:

gebaut Programme

Was meine Probleme sind:

  • OpenCV Programme mit dem Cross-Compiler nicht
  • |2|fatal error: opencv2/highgui/highgui.hpp: No such file or directory| 
    
    kompilieren

  • Ich glaube, ich OpenCV kompilieren als auch auf Ubuntu überqueren müssen. Aus meinem Cross-Compiler habe ich auch eine Werkzeugkette
  • # this one is important 
    SET(CMAKE_SYSTEM_NAME Linux) 
    #this one not so much 
    SET(CMAKE_SYSTEM_VERSION 1) 
    
    # specify the cross compiler 
    SET(CMAKE_C_COMPILER 
    /home/christian/Programming/x-tools/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc) 
    
    SET(CMAKE_CXX_COMPILER 
    /home/christian/Programming/x-tools/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-g++) 
    
    # where is the target environment 
    SET(CMAKE_FIND_ROOT_PATH 
    /home/christian/Programming/x-tools/arm-unknown-linux-gnueabi) 
    
    # search for programs in the build host directories 
    SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
    # for libraries and headers in the target directories 
    SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
    SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
    

    mit dieser Toolkette Ich habe versucht, OpenCV mit diesem Befehl zu überqueren kompilieren:

    cmake -DCMAKE_TOOLCHAIN_FILE=../Toolchain-RaspberryPi.cmake ../ 
    

    Nach dem Befehl make es bis 27% kompiliert. Es hält es mit diesem Fehler

    [ 27%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.cpp.o 
    In file included from /home/christian/Downloads/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp:60:0, 
           from /home/christian/Downloads/opencv-2.4.8/modules/highgui/src/cap_ffmpeg.cpp:45: 
    /home/christian/Downloads/opencv-2.4.8/modules/highgui/src/ffmpeg_codecs.hpp:81:36: fatal error: libavformat/avformat.h: No such file or directory 
        #include <libavformat/avformat.h> 
                ^
    compilation terminated. 
    make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.cpp.o] Error 1 
    make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2 
    make: *** [all] Error 2 
    

  • Ich versuchte, die OpenCV-Header und Bibliotheken auf dem Raspberry Pi zu meinem ubuntu Computer kompiliert zu kopieren und sie verknüpfen. Ich erhalte viele Fehler während
  • Kompilieren

    ||=== RPi_Cross_CV, Debug ===| 
    ||warning: libz.so.1, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_core.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libjpeg.so.8, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libpng12.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libtiff.so.4, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libjasper.so.1, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgtk-x11-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgdk-x11-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libatk-1.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgio-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libpangoft2-1.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libpangocairo-1.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgdk_pixbuf-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libcairo.so.2, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libpango-1.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libfreetype.so.6, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libfontconfig.so.1, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgobject-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libglib-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgthread-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgstbase-0.10.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgstreamer-0.10.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libgmodule-2.0.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libxml2.so.2, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libdc1394.so.22, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libv4l1.so.0, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libavcodec.so.53, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libavformat.so.53, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libavutil.so.51, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ||warning: libswscale.so.2, needed by ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8, not found (try using -rpath or -rpath-link)| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_3.9'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_time_val_add'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `jas_image_writecmpt'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_widget_queue_draw'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_53'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_51'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_8.0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `jas_cmprof_destroy'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_return_if_fail_warning'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_camera_enumerate'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_capture_stop'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `compress'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_get_image_size_from_video_mode'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_timeout_add'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `v4l2_munmap'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_feature_whitebalance_get_value'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_type_new'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `jas_image_destroy'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_53'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_2'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_core.so.2.4.8||undefined reference to `gzeof'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_style_attach'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_widget_get_type'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_window_resize'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_cond_broadcast'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_video_get_supported_framerates'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_8.0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_53'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_3.9'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `uncompress'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_type_check_instance_cast'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_usleep'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_53'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `g_get_current_time'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_8.0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_video_get_mode'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_8.0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_53'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_window_set_geometry_hints'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_signal_connect_full'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gdk_draw_rgb_image'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_widget_queue_resize'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `dc1394_video_set_mode'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `jas_stream_close'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `[email protected]_8.0'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `jas_image_readcmpt'| 
    ../../../../Programming/x-tools/usr-local/lib/libopencv_highgui.so.2.4.8||undefined reference to `gtk_disable_setlocale'| 
    ||More errors follow but not being shown.| 
    ||Edit the max errors limit in compiler options...| 
    ||=== Build finished: 50 errors, 29 warnings ===| 
    

    Also meine Frage ist:

    Wie kann ich einen Crosscompiler auf Ubuntu arbeiten mit opencv bekommen? Ich will nur auf Ubuntu kompilieren, kopieren Sie das Programm auf dem Pi und dort ausgeführt werden.

    Vielen Dank

    Antwort

    2

    Sie überqueren können diesen Link Qt (C++) mit OpenCV auf die Raspberry Pi kompilieren: sollte http://aplacetogeek.wordpress.com/qt-opencv-v4l-cross-compiling-raspberry-pi-beagle-bone/

    geben Dieser Link Sie alle benötigten Informationen, wie Sie Ihr System machen Lage für das raspberry Pi zu überqueren kompilieren. Wenn Sie festgelegt haben, der Link sagt alles, um den Weg nach oben, ich glaube, Sie auch das Kreuz der opencv Bibliothek verwenden können, um C++ zu kompilieren, ohne Qt wenn Sie es vorziehen.

    5

    Ich weiß, dass dies eine alte Frage ist, aber für den Rekord konnte ich mein OpenCV-Projekt von Ubuntu übersetzen.

    In meinem Fall habe ich die vorbereitete Raspberry Pi Toolchain auf Github: https://github.com/raspberrypi/tools auf Ubuntu 12.0.4 verwendet. Ich nahm den Ansatz, die nativen Bibliotheken (mit installierten OpenCV- und PiCamera-Bibliotheken) vom Ziel-Raspberry-Pi-System auf die Ubuntu-Instanz zu kopieren und die CMAKE_TOOLCHAIN_FILE-Unterstützung zu verwenden, wie Sie es in Ihrem Beitrag erwähnt haben.

    Allerdings gab es einige Fragen, die ich zu überwinden hatte, die ich in diesem Beitrag nicht decken: https://solderspot.wordpress.com/2016/02/04/cross-compiling-for-raspberry-pi-part-ii

    Die wichtigsten Punkte waren:

    1. CMAKE_FIND_ROOT_PATH bewirken nicht hatte. Ich musste CMAKE_SYSROOT verwenden.

    2. In meiner CMakeLists.txt-Datei musste ich immer noch explizit Pfade mit dem Pfad zu dem Ordner voranstellen, in dem ich über das native Dateisystem kopiert hatte.

    3. Ich musste auch explizit die dynamischen Bibliothek Linkpfade innerhalb von CMAKE_TOOLCHAIN_FILE angeben, da die Toolchain die Datei /usr/etc/ld.so.conf nicht korrekt parsiert.

    Die einzige aktuelle Ausgabe, die ich noch nicht lösen konnte, war mit der Jessie Freisetzung von Raspbian zu tun, wie OpenCV eine gcc/g ++ 4.9-Funktion verwendet, die nicht durch die gcc/g ++ 4.8-Version des Werkzeugkette unterstützt wird. Es sieht so aus, als würde die Toolchain in naher Zukunft um 4.9 erweitert werden.

    Meine letzte CMAKE_TOOLCHAIN_FILE war:

    SET(CMAKE_SYSTEM_NAME Linux) 
    SET(CMAKE_SYSTEM_VERSION 1) 
    
    SET(DEVROOT $ENV{HOME}/pidev) 
    SET(PIROOT ${DEVROOT}/piroot) 
    SET(PITOOLS ${DEVROOT}/pitools) 
    
    SET(TOOLROOT ${PITOOLS}/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64) 
    
    # specify the cross compiler 
    SET(CMAKE_C_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-gcc) 
    SET(CMAKE_CXX_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-g++) 
    
    SET(FLAGS "-Wl,-rpath-link,${PIROOT}/opt/vc/lib -Wl,-rpath-link,${PIROOT}/lib/arm-linux-gnueabihf -Wl,-rpath-link,${PIROOT}/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,${PIROOT}/usr/local/lib") 
    
    UNSET(CMAKE_C_FLAGS CACHE) 
    UNSET(CMAKE_CXX_FLAGS CACHE) 
    
    SET(CMAKE_CXX_FLAGS ${FLAGS} CACHE STRING "" FORCE) 
    SET(CMAKE_C_FLAGS ${FLAGS} CACHE STRING "" FORCE) 
    
    SET(CMAKE_SYSROOT ${PIROOT}) 
    SET(CMAKE_FIND_ROOT_PATH ${PIROOT}) 
    
    
    # search for programs in the build host directories 
    SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
    # for libraries and headers in the target directories 
    SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
    SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
    

    Wo ich hatte einen pidev Ordner in meinem Home-Verzeichnis und unter diesem piroot hatte eine Kopie von/usr/opt/etc und/lib von meinem pi host, und pitools ist ein Klon der Toolchain von GitHub I Referenz oben.

    Meine CMakeLists.txt Datei für mein Projekt war:

    cmake_minimum_required(VERSION 2.8) 
    project(PiCamCVTest) 
    SET(COMPILE_DEFINITIONS -Werror) 
    
    include_directories(SYSTEM ${PIROOT}/opt/vc/include ${PIROOT}/opt/vc/include/interface/vcos/pthreads ${PIROOT}/opt/vc/include/interface/vmcs_host/linux) 
    link_directories(${PIROOT}/opt/vc/lib) 
    add_executable(PiCamCVTest main.cpp camera.cpp cameracontrol.cpp graphics.cpp) 
    
    target_link_libraries(PiCamCVTest libmmal_core.so libmmal_util.so libmmal_vc_client.so libvcos.so librt.so libbcm_host.so GLESv2 EGL libopencv_core.so libopencv_imgproc.so) 
    

    Hoffnung, das hilft.

    +0

    Wo haben Sie die Kopie von Opencv-Bibliotheken von Pi genommen? Ich starte 'sudo apt-get install libopencv-dev' auf meinem pi und installiere erfolgreich. Aber ich kann kein libopencv * .so finden, weder in '/ usr/lib','/lib', '/ usr/local/lib'. Ich finde nur Header-Dateien in '/ usr/include/opencv' und'/usr/include/opencv2'. Ich bin mir aber sehr sicher, dass ich mit opencv lokal auf pi kompilieren kann, einfach nicht finde, wo die libs sind. – Alston

    -1

    Ich habe die Schritte gefolgt oben und ich bin mit dem gehorchen, zurückzuweisen Fehler bekommen:

    make[2]: *** No rule to make target '/opt/vc/lib/libmmal_core.so', needed by 'agv_car'. Stop. 
    

    hat jemand ein Projekt kompilieren, die verwendet opencv und die raspicam Bibliotheken überqueren verwaltet?

    +0

    Bitte schreiben Sie Ihre Kommentare in den Kommentarbereich, nicht als Antwort. – Emadpres