Я получаю сообщение об ошибке компоновки при компиляции 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 -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 ..

У меня тоже была такая же проблема, интересно то, что проблема не в 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, потому что это была последняя версия, которая работала для меня).
Ответ Джека Леоу был очень полезен, но мне пришлось провести дополнительное расследование, потому что действительно его решение больше не работает.
Наконец я нашел этот ответ на opencv github по алалек. Если коротко, он предлагает добавить следующее определение cmake:
-DOPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE=ON
Это решение работает для меня.
P.S.: На данный момент мне удалось решить еще несколько проблем на пути к отличной сборке opencv. Но в настоящее время сборка находится в процессе (44%), надеюсь, она будет завершена в ближайшие полчаса, ха-ха!
Какова была ваша команда
cmake?