2017-02-25 2 views
6

opencv 3.2をcuda 8でビルドしたいと思っています。私のLinuxシステムには、cmakeでmakefileを生成した後、Debian 9 testing (stretch) 4.9.0-1-amd64 のcudaに必要なライブラリがすべてインストールされています。 makeコマンドを実行して複数定義のリンケージエラーが発生しました。 私はcmakeで多くの設定を試みましたが、多くのフォーラムで関連する問題をほとんどすべて調べましたが、解決策が見つかりませんでした。 cmakeのは、私が変更されているCUDAコンパイラはGCC-5にするCUDA 8は、バージョン5遅くともGCCコンパイラを必要としないと、デフォルトのGCCコンパイラはここでバージョン6.3 である私のcmakeの設定出力であることから:ここでOpenCvソースで複数の定義リンクエラーが発生する

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 

[ 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

なぜあなたは戒厳令を構築したいのですが、それはしばらくの間面倒でした – Sarvex

+0

残念なことにcudalegacyの選択を解除しても問題は解決しません。複数の定義リンクエラーがまだあります。 – AMCoded

+0

最初にCUDAサポートなしでコンパイルを試して、デバッグを絞り込んでください。 – Sarvex

答えて

1

私は研究多くの回避策を持っているし、最終的に私は、このソリューションで多くの未解決の疑問の解消がありますがDebianの9にクーダ8でのOpenCV 3.2を構築するために解決策を考え出したが、それは実際に動作します:

1-gccを必要としますコンパイラのバージョン5.1から5.x。

2 - あなたは(あなたがあなたの新しいコンパイラのバージョンをアンインストールする必要はありません)あなたが選択する必要がありますので

3-のOpenCV自体がGCC 5.xのを使用してコンパイルされなければならないG ++ のための同等のコンパイラのバージョンをインストールする必要がありますあなたの

CMAKE

で手動でのgccとg ++コンパイラの4分割コンパイルオプションは

5-事前コンパイラオプションはCMAKE(非常に重要)から無効にする必要があります@InfinityChaosのおかげでこのオファーのためCMAKE から無効にする必要があり

6:Qt、OpenGL、OpenClのオプションを有効にすることができます。

7 TBBオプションをマークする必要はありません。

+0

TBBは何らかのエラーを引き起こさず、使用できます。 'BUILD_TBB'を使わず、インターネットからpremade TBBパッケージを入手し、そこに設定してください。 – FadedCoder

1

オーケーmakeコマンドの出力は、最後に回避策を見つけました。 (Btw、私はCMakeのGUIを使用しています)。

CMake-GUIのオプションでCUDA_SEPARABLE_COMPILATIONのチェックを外す必要があります。

残念ながら、この単なる回避策とCUDA分離コンパイルは、Linuxでは使用できません。 (これはWindowsを使用する必要があります)。私はOpenCVリポジトリの問題(https://github.com/opencv/opencv/issues/5557)でこれを見つけました。

PS:

私はトラブルQt5でのOpenCVをビルドを持っています。あなたが成功した場合は、コメントに私に知らせてください。ありがとう!

+0

こんにちは、ソリューションを共有していただきありがとうございます。私はまだそれを試していない。しかし、CUDAがなければ私はqt5でコンパイルすることができました。別々のコンパイルで元の問題のリンクを投稿してもらえないのはなぜ分かりませんか?あなたはopencvとCUDAをgcc-5でコンパイルする価値があると思いますか? – AMCoded

+0

問題を見つけようとしましたが、もう一度見つけることができませんでした。これは私がやったことです - CUDA 8.0はGCC 5+とコンパイルされないので、GCC 4.9をインストールしなければなりませんでした(古いDebian Jessieから入手しました).CUDAホストコンパイラをGCC 4.9と残りのOpenCV GCC 6 – FadedCoder

+0

問題が見つかりましたatlast、実際にはまだ問題が開いている - > https://github.com/opencv/opencv/issues/5557 – FadedCoder

関連する問題