簡體   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