[英]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.