Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Could not build OpenCV 4.x WITH_CUDA=ON(CUDA 12.0) #23034

@atinfinity

Description

@atinfinity

System Information

OpenCV version: 4.x bc8c912
OpenCV contrib version: af3a467adcd4b8cfe2d4084a891c116eecce3b5a
Operating System / Platform: Ubuntu 22.04
Compiler & compiler version: GCC 11.3.0
CUDA version: 12.0

Detailed description

I tried to build opencv( bc8c912c7a01ebedf181d4dd3a1b6e57327f4401 ) and opencv_contrib( af3a467adcd4b8cfe2d4084a891c116eecce3b5a ) with WITH_CUDA=ON.

But, I could not build OpenCV.

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/common.hpp(102): error: identifier "textureReference" is undefined
/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(86): error: identifier "PtrStepb" is undefined
/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(94): error: identifier "PtrStepb" is undefined
details log
/home/opencv/opencv/modules/core/include/opencv2/core/cuda/common.hpp(102): error: identifier "textureReference" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(86): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(94): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(99): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(109): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(115): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(136): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/include/opencv2/core/cuda/utility.hpp(137): error: identifier "PtrStepb" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(57): error: namespace "cv::cv" has no member "cudev"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(71): error: name followed by "::" must be a class or namespace name

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(81): error: name followed by "::" must be a class or namespace name

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(105): error: not a class or struct name

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(105): error: class or struct definition is missing

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(110): warning #12-D: parsing restarts here after previous syntax error

Remark: The warnings can be suppressed with "-diag-suppress <warning-number>"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: incomplete type is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: identifier "GpuMat" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: identifier "mat" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: too many initializer values

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(112): error: expected a ")"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(113): error: expected a ";"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(136): warning #12-D: parsing restarts here after previous syntax error

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(137): error: this declaration has no storage class or type specifier

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(137): error: expected a ";"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(140): error: this declaration has no storage class or type specifier

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(140): error: expected a ";"

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(185): warning #12-D: parsing restarts here after previous syntax error

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(187): error: this declaration has no storage class or type specifier

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(187): error: identifier "data" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(188): error: this declaration has no storage class or type specifier

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(188): error: identifier "step" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(188): error: identifier "rows" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(188): error: identifier "cols" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(188): error: identifier "esz" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(190): error: expected a declaration

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(193): error: expected a declaration

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(338): warning #12-D: parsing restarts here after previous syntax error

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(340): error: expected a declaration

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(411): warning #12-D: parsing restarts here after previous syntax error

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(412): error: identifier "func_t" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: identifier "setToWithOutMask" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(414): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(415): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(416): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(417): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(418): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(419): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: type name is not allowed

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(420): error: expected an expression

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: identifier "depth" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: identifier "channels" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: variable "funcs" has already been defined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: "this" may only be used inside a nonstatic member function

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: identifier "value" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(423): error: identifier "stream" is undefined

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(425): error: expected a declaration

/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu(426): error: expected a declaration

Error limit reached.
100 errors detected in the compilation of "/home/opencv/opencv/modules/core/src/cuda/gpu_mat.cu".
Compilation terminated.
CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.Release.cmake:280 (message):
  Error generating file
  /home/opencv/opencv/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o


make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/build.make:544: modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:3876: modules/core/CMakeFiles/opencv_core.dir/all] Error 2

NVIDIA says the following comment.

texture reference support has been removed from CUDA 12.0.

https://forums.developer.nvidia.com/t/cuda-12-0-still-support-for-texture-reference-support-for-pascal-architecture-warp-synchronous-programming/237284

But, opencv2/core/cuda/common.hpp uses textureReference.

#if (CUDART_VERSION >= 12000)
template<class T> inline void bindTexture(const textureReference* tex, const PtrStepSz<T>& img) { CV_Error(cv::Error::GpuNotSupported, "Function removed in CUDA SDK 12"); }
template<class T> inline void createTextureObjectPitch2D(cudaTextureObject_t* tex, PtrStepSz<T>& img, const cudaTextureDesc& texDesc) {
CV_Error(cv::Error::GpuNotSupported, "Function removed in CUDA SDK 12"); }

related PR

Steps to reproduce

I used nvidia/cuda:12.0.0-devel-ubuntu22.04 docker image.

git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout af3a467adcd4b8cfe2d4084a891c116eecce3b5a
cd ..
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout bc8c912c7a01ebedf181d4dd3a1b6e57327f4401
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/opencv/opencv_contrib/modules -D WITH_CUDA=ON -D WITH_CUFFT=ON -D CUDA_ARCH_BIN="7.5" -D CUDA_ARCH_PTX="" ..
make -j8

Issue submission checklist

  • I report the issue, it's not a question
  • I checked the problem with documentation, FAQ, open issues, forum.opencv.org, Stack Overflow, etc and have not found any solution
  • I updated to the latest OpenCV version and the issue is still there
  • There is reproducer code and related data files (videos, images, onnx, etc)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions