CMake: библиотеки CUDA не найдены при компиляции OpenCV

Я собираю OpenCV 3.0.0 с поддержкой CUDA в Windows, используя CMAKE. Когда я нажимаю «configure», ошибки происходят следующим образом:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: CUDA_cufft_LIBRARY (ADVANCED) linked by target "opencv_hal" in directory E:/dev-lib/opencv3/sources/modules/hal ... CUDA_nppc_LIBRARY (ADVANCED) ... CUDA_nppi_LIBRARY (ADVANCED) ... CUDA_npps_LIBRARY (ADVANCED) 

Я проверил «WITH_CUDA» и «WITH_CUFFT» в записи. Если я также проверю «WITH_CUBLAS», выходы выше добавят еще CUDA_cublas_LIBRARY ошибку CUDA_cublas_LIBRARY .

Но перед всеми этими сообщениями об ошибках это показывает, что

 CUDA detected: 7.5 CUDA NVCC target flags: -gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_30,code=compute_30 

который указывает, что CUDA может быть обнаружено CMAKE. Однако эти 4 библиотеки не могут быть найдены.

Я установил CUDA 7.5 и скомпилировал его с Visual Studio 2012 раньше. Образцы CUDA отлично работают. Поэтому мои библиотеки CUDA должны быть установлены правильно.

Интересно, даже если мне нужно установить эти значения вручную, как мне это сделать?

Мои спецификации: Windows 7 x64, Visual Studio 2012, CMAKE 3.4.0, CUDA Toolkit 7.5

Благодаря советам от Drop в комментариях, я решил эту проблему. Чтобы закрыть этот вопрос, я отвечаю на свой вопрос.

Это проблема архитектуры «Win32 или x64». Поскольку NVIDIA предоставляет только cufft , nvblas , nppc , nppi , npps libs для x64, для CMAKE, естественно, невозможно найти эти библиотеки для настройки библиотеки Win32 OpenCV.

Моим решением было выбрать Visual Studio 11 Win64 вместо Visual Studio 11 в качестве генератора в CMAKE. Так что CMAKE будет автоматически загружать libs из \lib\x64 а не \lib\Win32 . Более того, мне также нужно загрузить все остальные библиотеки, требуемые OpenCV в 64-битной версии, например OpenGL. Мне также нужно будет скомпилировать OpenCV в архитектуре x64. Весь код, который я собираюсь писать в будущем, придется создавать и отлаживать только в x64.


Если у вас нет проблем с чтением китайских материалов, я рад предоставить ссылку на сообщение относительно полного руководства по созданию OpenCV 3.0 на VS2012 с поддержкой CUDA.

Для Linux я решил следующим шагом:

(1) Проверьте файл .so в папке lib, например cuda7-cudnn3 / lib64

(2) Сделать символическую ссылку, как sudo ln -s libcublas.so.7.5.18 libcublas.so

Для моего случая я правильно установил ссылку в CMakeLists.txt и Makefile.config, но не был .so файл.

это действительно связано с версией !!! если вы хотите скомпилировать Cuda, когда вы cmake opencv2413, вы заметите, что make-файл попытается найти некоторые сторонние библиотеки для поддержки большего числа функций:

CUDA_TOOLKIT_ROOT_DIR C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v9.0

из этого я знаю, что когда-либо устанавливал CUDA v9.0, но я все еще не нашел ошибку opencv_dep_CUDA_nppi_LIBRARY, поэтому я ищу ее в C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v9.0 \ lib \ x64, Я не смог получить его, чье имя nppi.lib , поэтому для теста я создаю пустой файл и назову его nppi.lib , как я полагаю, я работал, но на самом деле этого было недостаточно, тест может не помогать компиляции opencv, более того, я обнаружил, что у меня CUDA v8, и, судя по всему, я получил lib nppi.lib в C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v8.0 \ lib \ x64; поэтому я меняю свой путь среды,

CUDA_TOOLKIT_ROOT_DIR C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v8.0, после чего я переконфигурировал его. это сработало!!