在Mac OS X high Sierra(10.13.6)上使用cuda编译opencv时出现链接错误。
错误消息:
[ 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版本
我在ccmake中检查了正确的cuda路径。
由于/ usr / local / cuda存在,我不知道为什么会出现ld警告。
什么是-llib?
答案 0 :(得分:1)
我也遇到了同样的问题,有趣的是,问题似乎与OpenCV无关,而与cmake
无关。
cmake
随附的FindCUDA似乎已损坏,产生了奇怪的-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 ...元素也会在进行安装时引起问题)
但是,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,因此我猜测它很快将无法修复。
答案 1 :(得分:1)
Answer by Jack Leow非常有用,但是我不得不作进一步调查,因为实际上他的解决方案不再起作用。
最后,我在this answer on opencv github处找到了alalek。简而言之,他建议添加以下cmake定义:
-DOPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE=ON
此解决方案对我有用。
P.S .:目前,在设法获得出色的opencv构建的过程中,我设法解决了更多问题。但是目前正在建设中(44%)希望它会在下一个半小时内完成,哈哈!
答案 2 :(得分:0)
对不起,尽管此变通办法仅适用于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,因为我在构建opencv-3.4.9时遇到了“可空性”编译错误,可能是Clang引起的。