2015-10-13 4 views
4

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

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 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

+2

Вы настраиваете архитектуру x86 или x86_64? Есть ли причина не использовать предварительно скомпилированные двоичные файлы и использовать компилятор 4 года? – Drop

+0

Я не уверен, как выбирать между x86 или x86_64 в CMAKE. Я думал, что он находится на стадии компиляции всего проекта с использованием MSVC. Что касается VS2012, я использую его сейчас, и он все еще отлично работает. @ Drop –

+1

Нет, в созданном проекте будет только одна платформа. Если вы используете cmake-gui, вы можете выбрать toolchain + platform во всплывающем окне сразу после того, как вы нажмете «Настроить» в первый раз. Вам нужно удалить кэш CMake (в меню «Файл») или просто удалить фальсификатор сборки, чтобы он мог снова выбрать другую платформу. Nvidia предоставляет только 'cufft' и' nppi' для 64-битной платформы (проверьте ' \ lib \ ' папку). – Drop

ответ

15

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

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

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


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

+0

Спасибо за решение. У меня была такая же проблема с использованием VS 14 и CUDA Toolkit v7.5. Когда я перешел на x64, CMake нашел библиотеки. Для новичков в CMake GUI вам необходимо создать новый каталог сборки для сборки x64, а затем, щелкнув по кнопке Configure, вы сможете выбрать 64-битный компилятор. Затем все прошло хорошо для меня. – OnTheContrary

+0

Или просто нажмите «Файл | Удалить Cache' перед изменением архитектуры :) –

+0

У меня такая же проблема, но с использованием VS 2017, Cmake 3.10 и CUDA 9.0. Решение для меня не работает! Still CUDA_nppi_LIBRARY-NOTFOUND и CUDA_nvcuvenc_LIBRARY-NOTFOUND – sgira

Смежные вопросы