使用CUDA构建OpenCV 3.1失败

时间:2016-08-29 15:10:05

标签: python opencv gcc

我按照http://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/的说明构建OpenCV。

我系统上的版本:OpenCV 3.1,Python 3.5。运行Ubuntu 16.04.1

另外,我的系统上安装了CUDA 8.0RC,在运行cmake时会检测到。

由于CUDA似乎不支持gcc-5或更新版本,我也安装了gcc 4.7,并将其传递给我的带有CUDA_NVCC_FLAGS标志的cmake调用:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D CUDA_NVCC_FLAGS="-ccbin gcc-4.7" \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

cmake成功完成。然后我尝试调用运行一段时间的make -j4,但失败率为44%,以下消息对我没有任何帮助:

[ 44%] Linking CXX shared library ../../lib/libopencv_cudaimgproc.so
[ 44%] Built target opencv_cudaimgproc
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

这里发生了什么?我不知道cmake或内部如何实际工作并且越来越沮丧。之前我能解决几个问题,但这个问题让我感到困惑。我只想让OpenCV在我的python3安装中运行......

编辑:正在运行make VERBOSE=1 -j4会显示以下附加输出:

[ 47%] Linking CXX shared library ../../lib/libopencv_photo.so
cd /home/flo/tmp/opencv/OpenCV1/build/modules/photo && /usr/bin/cmake -E cmake_link_script CMakeFiles/opencv_photo.dir/link.txt --verbose=1
/usr/bin/c++  -fPIC    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security   -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -Wno-undef -Wno-missing-declarations -O3 -DNDEBUG  -DNDEBUG  -shared -Wl,-soname,libopencv_photo.so.3.1 -o ../../lib/libopencv_photo.so.3.1.0 CMakeFiles/opencv_photo.dir/src/contrast_preserve.cpp.o CMakeFiles/opencv_photo.dir/src/seamless_cloning_impl.cpp.o CMakeFiles/opencv_photo.dir/src/merge.cpp.o CMakeFiles/opencv_photo.dir/src/npr.cpp.o CMakeFiles/opencv_photo.dir/src/seamless_cloning.cpp.o CMakeFiles/opencv_photo.dir/src/align.cpp.o CMakeFiles/opencv_photo.dir/src/denoise_tvl1.cpp.o CMakeFiles/opencv_photo.dir/src/calibrate.cpp.o CMakeFiles/opencv_photo.dir/src/denoising.cuda.cpp.o CMakeFiles/opencv_photo.dir/src/tonemap.cpp.o CMakeFiles/opencv_photo.dir/src/denoising.cpp.o CMakeFiles/opencv_photo.dir/opencl_kernels_photo.cpp.o CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_nlm.cu.o  -L/usr/local/cuda-8.0/lib64 ../../lib/libopencv_cudaimgproc.so.3.1.0 -ldl -lm -lpthread -lrt -lGLU -lGL -ltbb -latomic ../../../3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.a -lcudart -lnppc -lnppi -lnpps -lcufft -L/usr/local/cuda-8.0/lib64 -lcudart -lnppc -lnppi -lnpps ../../lib/libopencv_cudafilters.so.3.1.0 ../../lib/libopencv_cudaarithm.so.3.1.0 ../../lib/libopencv_imgproc.so.3.1.0 ../../lib/libopencv_core.so.3.1.0 ../../lib/libopencv_cudev.so.3.1.0 -lcufft -Wl,-rpath,/usr/local/cuda-8.0/lib64:/home/flo/tmp/opencv/OpenCV1/build/lib:
cd /home/flo/tmp/opencv/OpenCV1/build/modules/photo && /usr/bin/cmake -E cmake_symlink_library ../../lib/libopencv_photo.so.3.1.0 ../../lib/libopencv_photo.so.3.1 ../../lib/libopencv_photo.so
make[2]: Leaving directory '/home/flo/tmp/opencv/OpenCV1/build'
[ 47%] Built target opencv_photo
make[1]: Leaving directory '/home/flo/tmp/opencv/OpenCV1/build'
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

编辑2 根据评论中的建议,我尝试使用以下命令进行串行构建:

make clean && make VERBOSE=1

不幸的是它仍然失败,输出结束如下:

// ... many warnings like this:
tmpxft_0000479e_00000000-4_test_cvt.compute_35.cudafe1.cpp:(.text._ZN7testing8internal21TypeParameterizedTestI7CvtTestNS0_11TemplateSelI19CvtTest_GpuMat_TestEENS0_6Types5IhtsifEEE8RegisterEPKcSA_SA_i[_ZN7testing8internal21TypeParameterizedTestI7CvtTestNS0_11TemplateSelI19CvtTest_GpuMat_TestEENS0_6Types5IhtsifEEE8RegisterEPKcSA_SA_i]+0x46e): undefined reference to `testing::Message::GetString() const'
tmpxft_0000479e_00000000-4_test_cvt.compute_35.cudafe1.cpp:(.text._ZN7testing8internal21TypeParameterizedTestI7CvtTestNS0_11TemplateSelI19CvtTest_GpuMat_TestEENS0_6Types5IhtsifEEE8RegisterEPKcSA_SA_i[_ZN7testing8internal21TypeParameterizedTestI7CvtTestNS0_11TemplateSelI19CvtTest_GpuMat_TestEENS0_6Types5IhtsifEEE8RegisterEPKcSA_SA_i]+0x787): undefined reference to `testing::Message::GetString() const'
CMakeFiles/opencv_test_cudev.dir/opencv_test_cudev_generated_test_arithm_func.cu.o:tmpxft_000048b6_00000000-4_test_arithm_func.compute_35.cudafe1.cpp:(.text._ZN7testing8internal21TypeParameterizedTestI8SqrtTestNS0_11TemplateSelI20SqrtTest_GpuMat_TestEENS0_6Types1IfEEE8RegisterEPKcSA_SA_i[_ZN7testing8internal21TypeParameterizedTestI8SqrtTestNS0_11TemplateSelI20SqrtTest_GpuMat_TestEENS0_6Types1IfEEE8RegisterEPKcSA_SA_i]+0x14b): more undefined references to `testing::Message::GetString() const' follow

collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_test_cudev] Error 1
make[1]: *** [modules/cudev/test/CMakeFiles/opencv_test_cudev.dir/all] Error 2
make: *** [all] Error 2

0 个答案:

没有答案
相关问题