【发布时间】:2017-07-15 23:33:06
【问题描述】:
我想用 cuda 8 构建 opencv 3.2,我已经在我的 linux 系统中安装了 cuda 所需的所有库,这是一个 Debian 9 testing (stretch) 4.9.0-1-amd64
使用 cmake 成功生成 makefile 后,我通过执行 make 命令得到多个定义链接错误。
我已经尝试了许多使用 cmake 的配置,并且我在许多论坛中检查了几乎所有相关问题,但我找不到任何解决方案。
在 cmake 中,我已将 cuda 编译器更改为 gcc-5,因为 cuda 8 需要不晚于版本 5 的 gcc 编译器,并且默认的 gcc 编译器是 6.3 版
这是我的 cmake 配置输出:
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
这是make命令的输出
[ 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
【问题讨论】:
-
为什么要建cudalegacy,麻烦了一段时间
-
不幸的是,取消选择 cudalegacy 并不能解决问题。还存在多个定义链接错误。
-
尝试在不支持CUDA的情况下先编译以缩小调试范围
-
我遇到了同样的问题,正在寻找解决方案。 PS:Qt 是否与 OpenCV 一起工作?它对我不起作用。
-
@Sarvex,没有 cuda 编译成功