Ошибка компоновки при компиляции OpenCV с CUDA на высокой Сьерра - PullRequest
0 голосов
/ 27 января 2019

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

Что такое -llib?

1 Ответ

0 голосов
/ 03 июля 2019

У меня была такая же проблема, интересно то, что проблема не в 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 *.1013 *

Сначала выполните следующее:

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, так что я думаю, что это не будет исправлено в ближайшее время.

...