繁体   English   中英

在高山脉上使用 cuda 编译 opencv 时出现链接错误

[英]Linking error while compiling opencv with cuda on high sierra

在 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 路径。

我不知道为什么会出现 ld 警告,因为 /usr/local/cuda 存在。

什么是-llib?

我也有同样的问题,有趣的是,问题似乎不是 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... 元素也会在你 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,所以我猜它不会很快得到修复。

Jack Leow 的回答非常有用,但我不得不进一步调查,因为他的解决方案确实不再有效。

最后,我alalek 的opencv github 上找到了这个答案 简而言之,他建议添加以下 cmake 定义:

-DOPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE=ON

这个解决方案对我有用。

PS:目前我设法解决了一些问题,以获得很棒的 opencv 构建。 但目前正在构建中(44%)希望半小时内完成,哈哈!

抱歉,尽管此解决方法曾在 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 引起的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM