2017-02-25 4 views
6

Ich möchte die OpenCV 3.2 mit Cuda 8 bauen und ich habe alle erforderlichen Bibliotheken für Cuda in meinem Linux-System installiert, die eine Debian 9 testing (stretch) 4.9.0-1-amd64 nach dem Generieren von Makefiles mit cmake erfolgreich ich bekomme Mehrfachdefinitionsverknüpfungsfehler durch Ausführen des make-Befehls. Ich habe viele Konfigurationen mit cmake ausprobiert und auch in vielen Foren habe ich fast alle diesbezüglichen Probleme überprüft, aber ich konnte keine Lösung finden. In Cmake habe ich geändert CUDA-Compiler gcc-5 seit cuda 8 kein gcc-Compiler muss später als Version 5 und die Standard-Compiler gcc ist Version 6.3 Hier ist meine Cmake Konfiguration Ausgang:Opencv Quelle kompilieren mit Cuda erzeugt mehrere Definition Link Fehler

OpenCV modules: 
    To be built:     cudev core cudaarithm flann imgproc ml video cudabgsegm cudafilters cudaimgproc cudawarping imgcodecs photo shape videoio cudacodec highgui objdetect ts features2d calib3d cudafeatures2d cudalegacy cudaobjdetect cudaoptflow cudastereo java stitching superres videostab python2 python3 
    Disabled:     world 
    Disabled by dependency:  - 
    Unavailable:     viz 

    GUI: 
    QT 5.x:      YES (ver 5.7.1) 
    QT OpenGL support:   YES (Qt5::OpenGL 5.7.1) 
    OpenGL support:    YES (/usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so) 
    VTK support:     NO 

    Media I/O: 
    ZLib:      /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.8) 
    JPEG:      /usr/lib/x86_64-linux-gnu/libjpeg.so (ver) 
    WEBP:      build (ver encoder: 0x020e) 
    PNG:       /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.28) 
    TIFF:      /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.7) 
    JPEG 2000:     /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1) 
    OpenEXR:      /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2.2.0) 
    GDAL:      NO 
    GDCM:      NO 

    Video I/O: 
    DC1394 1.x:     NO 
    DC1394 2.x:     YES (ver 2.2.5) 
    FFMPEG:      YES 
     avcodec:     YES (ver 57.64.101) 
     avformat:     YES (ver 57.56.101) 
     avutil:     YES (ver 55.34.101) 
     swscale:     YES (ver 4.2.100) 
     avresample:    YES (ver 3.1.0) 
    GStreamer:     NO 
    OpenNI:      NO 
    OpenNI PrimeSensor Modules: NO 
    OpenNI2:      NO 
    PvAPI:      NO 
    GigEVisionSDK:    NO 
    Aravis SDK:     NO 
    UniCap:      NO 
    UniCap ucil:     NO 
    V4L/V4L2:     NO/YES 
    XIMEA:      NO 
    Xine:      NO 
    gPhoto2:      YES 

    Parallel framework:   TBB (ver 4.3 interface 8006) 

    Other third-party libraries: 
    Use IPP:      9.0.1 [9.0.1] 
     at:      /home/user/opencv_build/3rdparty/ippicv/ippicv_lnx 
    Use IPP Async:    NO 
    Use VA:      NO 
    Use Intel VA-API/OpenCL:  NO 
    Use Lapack:     NO 
    Use Eigen:     YES (ver 3.3.2) 
    Use Cuda:     YES (ver 8.0) 
    Use OpenCL:     YES 
    Use OpenVX:     NO 
    Use custom HAL:    NO 

    NVIDIA CUDA 
    Use CUFFT:     YES 
    Use CUBLAS:     YES 
    USE NVCUVID:     NO 
    NVIDIA GPU arch:    20 30 35 37 50 52 60 61 
    NVIDIA PTX archs: 
    Use fast math:    YES 

    OpenCL:      <Dynamic loading of OpenCL library> 
    Include path:    /home/user/git/opencv/opencv/3rdparty/include/opencl/1.2 
    Use AMDFFT:     NO 
    Use AMDBLAS:     NO 

    Python 2: 
    Interpreter:     /usr/bin/python2.7 (ver 2.7.13) 
    Libraries:     /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.13) 
    numpy:      /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.0) 
    packages path:    lib/python2.7/dist-packages 

    Python 3: 
    Interpreter:     /usr/bin/python3 (ver 3.5.3) 
    Libraries:     /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.3) 
    numpy:      /usr/lib/python3/dist-packages/numpy/core/include (ver 1.12.0) 
    packages path:    lib/python3.5/dist-packages 

    Python (for build):   /usr/bin/python2.7 

    Java: 
    ant:       /usr/bin/ant (ver 1.9.8) 
    JNI:       /usr/lib/jvm/java-8-openjdk-amd64/include /usr/lib/jvm/java-8-openjdk-amd64/include/linux /usr/lib/jvm/java-8-openjdk-amd64/include 
    Java wrappers:    YES 
    Java tests:     NO 

    Matlab:      Matlab not found or implicitly disabled 

    Documentation: 
    Doxygen:      /usr/bin/doxygen (ver 1.8.13) 

    Tests and samples: 
    Tests:      NO 
    Performance tests:   NO 
    C/C++ Examples:    YES 

    Install path:     /usr/local 

und hier ist der Befehl make Ausgabe

[ 10%] Built target libwebp 
[ 10%] Built target opencv_cudev 
[ 14%] Built target opencv_core 
[ 14%] Linking CXX shared library ../../lib/libopencv_cudaarithm.so 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_absdiff_scalar.cu.o:(.bss+0xd090): multiple definition of `cv::cudev::color_cvt_detail::c_RGB2YUVCoeffs_f' 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_absdiff_mat.cu.o:(.bss+0xd090): first defined here 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_absdiff_scalar.cu.o:(.bss+0xd070): multiple definition of `cv::cudev::color_cvt_detail::c_RGB2YUVCoeffs_i' 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_absdiff_mat.cu.o:(.bss+0xd070): first defined here 
..... 
..... 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_transpose.cu.o:(.bss+0x0): multiple definition of `cv::cudev::color_cvt_detail::c_LabCbrtTab' 
CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_absdiff_mat.cu.o:(.bss+0x0): first defined here 
collect2: error: ld returned 1 exit status 
modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/build.make:11685: recipe for target 'lib/libopencv_cudaarithm.so.3.2.0' failed 
make[2]: *** [lib/libopencv_cudaarithm.so.3.2.0] Error 1 
CMakeFiles/Makefile2:1204: recipe for target 'modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/all' failed 
make[1]: *** [modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/all] Error 2 
Makefile:160: recipe for target 'all' failed 
make: *** [all] Error 2 
+0

Warum möchten Sie couslegacy bauen, es ist seit einiger Zeit mühsam – Sarvex

+0

Leider deaktiviert die Abwahl von cudalegacy das Problem nicht. Es gibt noch mehrere Definitionslinkfehler. – AMCoded

+0

Versuchen Sie, kompilieren ohne CUDA-Unterstützung zuerst, um das Debuggen einzugrenzen – Sarvex

Antwort

1

Ich habe Studie viele Abhilfen und schließlich kam ich mit einer Lösung bis OpenCV zu bauen 3.2 mit Cuda 8 in Debian 9. Es gibt viele unbeantwortet whys mit dieser Lösung ist, aber es funktioniert tatsächlich:

1-Sie gcc brauchen Compilerversionen 5.1 bis 5.x.

2-Sie sollten als gleichwertig Compiler-Versionen für g ++ installieren (Sie müssen Ihre neueren Compiler-Versionen nicht deinstallieren)

3-Die OpenCV selbst mit gcc 5.x kompiliert werden sollte, so sollten Sie Ihre wählen gcc und g ++ Compiler manuell in CMAKE

4-die separate Kompilierungsoption von CMAKE deaktiviert dank @InfinityChaos für dieses Angebot

5 die Pre-Compiler-Option zu deaktivieren sollte von CMAKE (sehr wichtig) sollte

6-Sie könnten aktivieren Qt, OpenGL und OpenCl Optionen keine Probleme auftreten

7-Sie müssen TBB Option nicht markieren.

+0

TBB verursacht keine Fehler, kann es verwendet werden. Verwenden Sie einfach nicht "BUILD_TBB", holen Sie sich ein vorgefertigtes TBB-Paket aus dem Internet und stellen Sie es dort ein. – FadedCoder

1

okay, fand eine Abhilfe endlich. (Btw, ich benutze CMake GUI).

Sie müssen CUDA_SEPARABLE_COMPILATION in den CMake-GUI-Optionen deaktivieren.

Leider ist dies nur ein Workaround und CUDA separable Kompilierung kann nicht in Linux verwendet werden. (Dafür müssen Sie Windows verwenden). Ich habe dies in einem Problem (https://github.com/opencv/opencv/issues/5557) im OpenCV-Repository gefunden.

PS:

Ich habe Probleme beim Bau OpenCV mit QT5. Wenn Sie dies erfolgreich tun, benachrichtigen Sie mich bitte in den Kommentaren. Vielen Dank!

+0

Hallo, vielen Dank für die gemeinsame Nutzung der Lösung. Ich habe es noch nicht versucht. Aber ohne CUDA könnte ich mit qt5 kompilieren.Ich kann nicht verstehen, warum mit separater Kompilierung es scheitern sollte, würden Sie bitte den ursprünglichen Problem Link posten? Glaubst du, es lohnt sich zu versuchen, alle opencv und CUDA mit gcc-5 – AMCoded

+0

zu kompilieren Ich habe versucht, das Problem zu finden, konnte es aber nicht wieder finden. Das habe ich gemacht - CUDA 8.0 kompiliert nicht mit GCC 5+, also musste ich GCC 4.9 installieren (ich habe es von der alten Debian Jessie bekommen), und ich habe den CUDA Host-Compiler als GCC 4.9 und den Rest von OpenCV eingestellt mit GCC 6 – FadedCoder

+0

Gefunden das Problem atlast, eigentlich ist das Problem noch offen -> https://github.com/opencv/opencv/issues/5557 – FadedCoder

Verwandte Themen