https://qiita.com/wahhoi22/items/d9ef90877fdb41dba1af#c11を使ってそのままコンパイルするとエラーが生じるで書かれている現象をhttps://hub.docker.com/r/nvidia/cudaにある以下のDockerイメージを使って追試をした。
- nvidia/cuda:11.5.2-cudnn8-devel-ubuntu20.04
- nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
- OpenCV 4.5.5
- Ubuntu 20.04
コンパイラ(gcc、g++)は以下の3バージョンを用いてそれぞれ実施した。
- 9.4.0
- 10.3.0
- 11.4.0
Looks like the problem is fixed in cuda-11.6.2
とあるため、CUDA ToolKitは以下の2バージョンを用いてそれぞれ実施した。
- 11.5.2
- 11.6.2
今回用いたビルドスクリプトは以下の通りである。GeForce RTX 2080 Tiが搭載された環境で実施したため、CUDA_ARCH_BIN="7.5"
としている。
#!/bin/bash
GENERATOR_NAME="Unix Makefiles"
CUDA_ARCH_BIN="7.5"
# building
cmake \
-G "${GENERATOR_NAME}" \
-B build \
-D BUILD_CUDA_STUBS=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_JASPER=OFF \
-D BUILD_JPEG=OFF \
-D BUILD_OPENEXR=OFF \
-D BUILD_PACKAGE=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_PNG=OFF \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_TBB=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_TIFF=OFF \
-D BUILD_WITH_DEBUG_INFO=ON \
-D BUILD_ZLIB=OFF \
-D BUILD_WEBP=OFF \
-D BUILD_opencv_apps=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_core=ON \
-D BUILD_opencv_cudaarithm=ON \
-D BUILD_opencv_cudabgsegm=ON \
-D BUILD_opencv_cudacodec=OFF \
-D BUILD_opencv_cudafeatures2d=ON \
-D BUILD_opencv_cudafilters=ON \
-D BUILD_opencv_cudaimgproc=ON \
-D BUILD_opencv_cudalegacy=ON \
-D BUILD_opencv_cudaobjdetect=ON \
-D BUILD_opencv_cudaoptflow=ON \
-D BUILD_opencv_cudastereo=ON \
-D BUILD_opencv_cudawarping=ON \
-D BUILD_opencv_cudev=ON \
-D BUILD_opencv_dnn=ON \
-D BUILD_opencv_features2d=OFF \
-D BUILD_opencv_flann=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_highgui=ON \
-D BUILD_opencv_imgcodecs=ON \
-D BUILD_opencv_imgproc=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_ml=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_photo=OFF \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ts=ON \
-D BUILD_opencv_video=OFF \
-D BUILD_opencv_videoio=OFF \
-D BUILD_opencv_world=OFF \
-D CMAKE_BUILD_TYPE=Release \
-D CUDA_ARCH_BIN=${CUDA_ARCH_BIN} \
-D CUDA_ARCH_PTX="" \
-D OPENCV_DNN_CUDA=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules \
-D WITH_1394=OFF \
-D WITH_CUBLAS=ON \
-D WITH_CUDA=ON \
-D WITH_CUFFT=ON \
-D WITH_CUDNN=ON \
-D WITH_EIGEN=ON \
-D WITH_FFMPEG=ON \
-D WITH_GDAL=OFF \
-D WITH_GPHOTO2=OFF \
-D WITH_GIGEAPI=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_GTK=OFF \
-D WITH_INTELPERC=OFF \
-D WITH_IPP=ON \
-D WITH_IPP_A=OFF \
-D WITH_JASPER=ON \
-D WITH_JPEG=ON \
-D WITH_LAPACK=ON \
-D WITH_LIBV4L=ON \
-D WITH_OPENCL=OFF \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCL_SVM=OFF \
-D WITH_OPENEXR=ON \
-D WITH_OPENGL=ON \
-D WITH_OPENJPEG=ON \
-D WITH_OPENMP=OFF \
-D WITH_OPENNI=OFF \
-D WITH_PNG=ON \
-D WITH_PTHREADS_PF=ON \
-D WITH_PROTOBUF=OFF \
-D WITH_PVAPI=OFF \
-D WITH_QT=OFF \
-D WITH_TBB=OFF \
-D WITH_TIFF=ON \
-D WITH_UNICAP=OFF \
-D WITH_V4L=ON \
-D WITH_VTK=ON \
-D WITH_WEBP=ON \
-D WITH_XIMEA=OFF \
-D WITH_XINE=OFF \
.
g++バージョン | build status |
---|---|
9.4.0 | Passed |
10.3.0 | Passed |
11.4.0 | Failed |
g++ 11.4.0を用いたときにhttps://qiita.com/wahhoi22/items/d9ef90877fdb41dba1af#c11を使ってそのままコンパイルするとエラーが生じるで書かれている現象が再現。
g++バージョン | build status |
---|---|
9.4.0 | Passed |
10.3.0 | Passed |
11.4.0 | Passed |
https://forums.developer.nvidia.com/t/cuda-11-6-0-with-gcc-11-2-1-fails-to-process-system-headers-included-by-functional/203556/4でレポートされているように修正されているように見受けられる。
同様の問題に遭遇した場合、CUDA ToolKitのバージョン変更、コンパイラのバージョン変更それぞれで影響範囲が異なるため、必要に応じて選択されたい。