Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
4 tasks done
atinfinity opened this issue Dec 25, 2022 · 3 comments · Fixed by #23037
Closed
4 tasks done

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

atinfinity opened this issue Dec 25, 2022 · 3 comments · Fixed by #23037

Comments

@atinfinity
Copy link
Contributor

atinfinity commented Dec 25, 2022

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)
@atinfinity atinfinity added the bug label Dec 25, 2022
@atinfinity
Copy link
Contributor Author

atinfinity commented Dec 25, 2022

For the investigation, I changed opencv2/core/cuda/common.hpp from OpenCV 4.6.0.

--- a/modules/core/include/opencv2/core/cuda/common.hpp
+++ b/modules/core/include/opencv2/core/cuda/common.hpp
@@ -95,7 +95,7 @@ namespace cv { namespace cuda
         {
             return (total + grain - 1) / grain;
         }
-
+#if (CUDART_VERSION < 12000)
         template<class T> inline void bindTexture(const textureReference* tex, const PtrStepSz<T>& img)
         {
             cudaChannelFormatDesc desc = cudaCreateChannelDesc<T>();
@@ -115,6 +115,7 @@ namespace cv { namespace cuda
 
             cudaSafeCall( cudaCreateTextureObject(tex, &resDesc, &texDesc, NULL) );
         }
+#endif
     }
 }}

And, I used opencv_contrib af3a467adcd4b8cfe2d4084a891c116eecce3b5a(includes opencv/opencv_contrib#3378). As a result, I could build core, cudev, cuda_xxxx module with CUDA 12.0.

@asmorkalov
Copy link
Contributor

cc @cudawarped

@cudawarped
Copy link
Contributor

cudawarped commented Dec 25, 2022

Wow don't know what I was thinking leaving textureReference in there. I'm going to install CUDA 12.0 and test on both Windows/linux and then submit a PR to fix anything I find.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants