0
votes

Erreur de liaison lors de la compilation d'opencv avec cuda sur High Sierra

J'obtiens une erreur de liaison lors de la compilation d'opencv avec cuda sur Mac OS X high Sierra (10.13.6).

Message d'erreur:

[ 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

J'ai déjà essayé à peu près toutes les versions de cuda (9, 9.2, 10) et opencv (3.4, 4.0.1). Je suis également conscient que chaque version de cuda nécessite une version Xcode spécifique.

J'ai également essayé différentes versions de cmake

J'ai vérifié les chemins cuda corrects dans ccmake.

Je ne sais pas pourquoi les avertissements ld apparaissent puisque / usr / local / cuda existe.

Qu'est-ce que -llib?


2 commentaires

Quelle était votre commande cmake ?


cmake -DWITH_CUDA = ON -DWITH_OPENGL = OFF -DCUDA_ARCH_BIN = 6.1 -DCUDA_VERBOSE_BUILD = ON -DCMAKE_BUILD_TYPE = RELEASE -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib / modules ..


3 Réponses :


2
votes

J'ai eu le même problème aussi, ce qui est intéressant c'est que le problème ne semble pas être avec OpenCV, mais avec cmake .

Le FindCUDA fourni avec cmake semble être cassé, produisant cet étrange -llib . Vous pouvez le voir pendant l'exécution de cmake ainsi que:

mv /usr/local/share/cmake/Modules/FindCUDA* /tmp # Or some other back up location
cp -r ~/opencv/cmake/FindCUDA* /usr/local/share/cmake/Modules

(Notez le deuxième élément "lib", les deux derniers éléments -L ... poseront également des problèmes lorsque vous effectuez l'installation)

Cependant, le paquet source opencv est livré avec des fichiers FindCUDA.cmake qui semblent fonctionner.

En supposant que: cmake est dans / usr / local / share / cmake La source d'opencv est dans ~ / opencv

Procédez d'abord comme suit:

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

Ensuite, exécutez vos étapes de construction comme avant ( cmake ... , make ... , make install ), et j'espère que cela fonctionnera cette fois (cela a fonctionné pour moi).

Pour autant que je sache, cmake a déprécié FindCUDA.cmake, donc je suppose que cela ne sera pas corrigé de si tôt.


0 commentaires

0
votes

désolé, bien que cette solution de contournement ait fonctionné une fois avec opencv-3.4.9 / XCode8.2 (Clang 8) / CMake 3.12, maintenant la commutation des fichiers FindCUDA ne fonctionne plus avec la combinaison

opencv-3.4.9 / XCode9.2 (Clang 9) / CMake 3.16 avec l'erreur suivante:

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)

J'ai dû mettre à jour XCode vers le 9.2 parce que j'avais une erreur de compilation "nullability" dans le bâtiment opencv-3.4.9 probablement causée par Clang.


1 commentaires

Je crois que le problème est CMake 3.16. J'ai dû reconstruire OpenCV avec CUDA 10.2 / Xcode 10.2.1 / macOS 10.13.6, et ma construction est terminée, mais j'ai dû revenir à CMake 3.14.5 (3.14.7 ou 3.15.x peuvent également fonctionner, mais 3.17. x n'a certainement pas - je suis juste allé directement à 3.14.5 parce que c'était la dernière version qui a fonctionné pour moi).



1
votes

La réponse de Jack Leow était très utile, mais j'ai dû faire une enquête plus approfondie, car en effet sa solution ne fonctionne plus.

Enfin, j'ai trouvé cette réponse sur opencv github par alalek . Si en bref, il propose d'ajouter la définition suivante de cmake:

-DOPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE=ON

Cette solution fonctionne pour moi.

PS: Actuellement, j'ai réussi à résoudre quelques problèmes supplémentaires sur mon chemin pour obtenir une superbe version d'opencv. Mais actuellement, la construction est en cours (44%) j'espère qu'elle sera terminée dans une demi-heure, haha!


0 commentaires