Ошибка связывания при компиляции opencv с cuda на high sierra

Я получаю сообщение об ошибке компоновки при компиляции opencv с cuda в Mac OS X high Sierra (10.13.6).

Сообщение об ошибке:

[ 21%] Linking CXX shared library ../../lib/libopencv_cudev.dylib
ld: warning: directory not found for option '-L/Users/unknownn/opencv/-Wl,-rpath,/usr/local/cuda'
ld: warning: directory not found for option '-L-Wl,-rpath,/usr/local/cuda'
ld: library not found for -llib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libopencv_cudev.4.0.1.dylib] Error 1
make[1]: *** [modules/cudev/CMakeFiles/opencv_cudev.dir/all] Error 2
make: *** [all] Error 2

Я уже пробовал почти все версии cuda (9, 9.2, 10) и opencv (3.4, 4.0.1). Также я знаю, что для каждой версии cuda требуется определенная версия Xcode.

Я также пробовал различные версии cmake

Я проверил правильные пути cuda в ccmake.

Я не знаю, почему появляются предупреждения ld, поскольку /usr/local/cuda существует.

Что такое -ллиб?

Какова была ваша команда cmake?

Mark Setchell 27.01.2019 10:14

cmake -DWITH_CUDA=ON -DWITH_OPENGL=OFF -DCUDA_ARCH_BIN=6.1 -DCUDA_VERBOSE_BUILD=ON -DCMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

user3063903 28.01.2019 11:11
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
500
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

У меня тоже была такая же проблема, интересно то, что проблема не в OpenCV, а в cmake.

FindCUDA, который поставляется с cmake, похоже, сломан, что приводит к появлению этого странного -llib. Вы можете увидеть это во время запуска cmake, а также:

Extra dependencies:          cudart_static lib nppc nppial nppicc nppicom nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cufft -L/usr/local/cuda/lib -L-Wl,-rpath,/usr/local/cuda

(Обратите внимание на второй элемент «lib», последние два элемента -L... также вызовут проблемы при выполнении make install)

Однако исходный пакет opencv поставляется с файлами FindCUDA.cmake, которые, кажется, работают.

Предполагая: cmake находится в /usr/local/share/cmake исходный код opencv находится в ~/opencv

Сначала сделайте следующее:

mv /usr/local/share/cmake/Modules/FindCUDA* /tmp # Or some other back up location
cp -r ~/opencv/cmake/FindCUDA* /usr/local/share/cmake/Modules

Затем выполните шаги сборки, как и раньше (cmake ..., make ..., make install), и, надеюсь, на этот раз все сработает (у меня так и получилось).

Насколько я могу судить, cmake устарел FindCUDA.cmake, поэтому я предполагаю, что в ближайшее время это не будет исправлено.

извините, хотя этот обходной путь работал когда-то с opencv-3.4.9/XCode8.2 (Clang 8)/CMake 3.12, теперь переключение файлов FindCUDA больше не работает с комбинацией

opencv-3.4.9/XCode9.2 (Clang 9)/CMake 3.16 со следующей ошибкой:

CMake Error at /Applications/CMake.app/Contents/share/cmake3.16/Modules/FindCUDA.cmake:416 (file):
file failed to open for writing (Permission denied):
/Users/filippo/opencv- 3.4.9/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_genera ted_gpu_mat.cu.o.depend
Call Stack (most recent call first):
/Applications/CMake.app/Contents/share/cmake-3.16/Modules/FindCUDA.cmake:1363 (cuda_include_nvcc_dependencies)
/Applications/CMake.app/Contents/share/cmake-3.16/Modules/FindCUDA.cmake:1650 (CUDA_WRAP_SRCS)
/Applications/CMake.app/Contents/share/cmake-3.16/Modules/FindCUDA.cmake:1663 (cuda_compile_base)
cmake/OpenCVDetectCUDA.cmake:262 (CUDA_COMPILE)
cmake/OpenCVUtils.cmake:1513 (ocv_cuda_compile)
cmake/OpenCVModule.cmake:927 (ocv_add_library)
cmake/OpenCVModule.cmake:848 (_ocv_create_module)
modules/core/CMakeLists.txt:81 (ocv_create_module)

Мне пришлось обновить XCode до версии 9.2, потому что у меня была ошибка компиляции «nullability» в сборке opencv-3.4.9, вероятно, вызванная Clang.

Я считаю, что проблема в CMake 3.16. Мне пришлось пересобрать OpenCV с CUDA 10.2/Xcode 10.2.1/macOS 10.13.6, и моя сборка была завершена, но мне пришлось вернуться к CMake 3.14.5 (3.14.7 или 3.15.x тоже могут работать, но 3.17. x определенно нет - я просто сразу перешел на 3.14.5, потому что это была последняя версия, которая работала для меня).

Jack Leow 28.03.2020 04:33

Ответ Джека Леоу был очень полезен, но мне пришлось провести дополнительное расследование, потому что действительно его решение больше не работает.

Наконец я нашел этот ответ на opencv github по алалек. Если коротко, он предлагает добавить следующее определение cmake:

-DOPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE=ON

Это решение работает для меня.

P.S.: На данный момент мне удалось решить еще несколько проблем на пути к отличной сборке opencv. Но в настоящее время сборка находится в процессе (44%), надеюсь, она будет завершена в ближайшие полчаса, ха-ха!

Другие вопросы по теме