web-dev-qa-db-fra.com

CMake: bibliothèques CUDA non trouvées lors de la compilation d'OpenCV

Je compile OpenCV 3.0.0 avec le support CUDA sous Windows, en utilisant CMAKE. Lorsque je clique sur "configurer", les erreurs se produisent comme suit:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_cufft_LIBRARY (ADVANCED)
    linked by target "opencv_hal" in directory E:/dev-lib/opencv3/sources/modules/hal
    ...
CUDA_nppc_LIBRARY (ADVANCED)
    ...
CUDA_nppi_LIBRARY (ADVANCED)
    ...
CUDA_npps_LIBRARY (ADVANCED)

J'ai vérifié "WITH_CUDA" et "WITH_CUFFT" dans les entrées. Si je vérifie également "WITH_CUBLAS", les sorties ci-dessus ajouteront une erreur CUDA_cublas_LIBRARY de plus.

Mais avant tous ces messages d'erreur, cela montre que

CUDA detected: 7.5
CUDA NVCC target flags: -gencode;Arch=compute_20,code=sm_20;-gencode;Arch=compute_20,code=sm_21;-gencode;Arch=compute_30,code=sm_30;-gencode;Arch=compute_35,code=sm_35;-gencode;Arch=compute_30,code=compute_30

ce qui indique que CUDA peut être détecté par CMAKE. Cependant, ces 4 bibliothèques nécessaires sont introuvables.

J'ai installé CUDA 7.5 et l'ai compilé avec Visual Studio 2012 auparavant. Les échantillons CUDA fonctionnent parfaitement. Donc, mes bibliothèques CUDA doivent être installées correctement.

Je me demande même si je dois définir ces valeurs manuellement, comment dois-je le faire?

Mes spécifications: Windows 7 x64, Visual Studio 2012, CMAKE 3.4.0, CUDA Toolkit 7.5

7
John Hany

Grâce aux conseils de Drop dans les commentaires, j'ai résolu ce problème. Afin de clore cette question, je réponds à ma propre question.

C'est un problème d'architecture "Win32 ou x64". Étant donné que NVIDIA fournit uniquement les bibliothèques cufft, nvblas, nppc, nppi, npps, pour x64, il est naturellement impossible pour CMAKE de trouver ces bibliothèques pour configurer une bibliothèque Win32 OpenCV.

Ma solution consistait à choisir Visual Studio 11 Win64 au lieu de Visual Studio 11 en tant que générateur dans CMAKE. Ainsi, CMAKE chargera automatiquement les bibliothèques à partir de <CUDA_DIR>\lib\x64 au lieu de <CUDA_DIR>\lib\Win32. De plus, je dois également charger toutes les autres bibliothèques requises par OpenCV en version 64 bits, telles que OpenGL. J'aurai aussi besoin de compiler OpenCV en architecture x64. Tout le code que je vais écrire à l'avenir devra être construit et débogué en x64 uniquement.


Si vous ne rencontrez pas de difficulté à lire Chinois documents, je suis heureux de fournir un lien vers un article concernant le guide complet sur la construction d'OpenCV 3.0 sur VS2012 avec le support CUDA.

19
John Hany

Pour le Linux, j'ai résolu par ces étapes:

(1) Vérifiez le fichier .so dans le dossier lib, tel que cuda7-cudnn3/lib64

(2) Faire un lien symbolique comme Sudo ln -s libcublas.so.7.5.18 libcublas.so

Pour mon cas, je mets correctement le lien dans CMakeLists.txt et Makefile.config, mais il n’existait pas de fichier .so

0
Cloud Cho

c'est vraiment lié à la version !!! si vous voulez compiler avec Cuda, quand vous allez créer opencv2413, vous remarquerez que le makefile va essayer de trouver des librairies tierces pour supporter plus de fonctions:

CUDA_TOOLKIT_ROOT_DIR C:/Fichiers programme/Boîte à outils NVIDIA GPU Computing/CUDA/v9.0

de cela, je sais que j’ai déjà installé CUDA v9.0, mais j’ai toujours cette erreur non trouvée opencv_dep_CUDA_nppi_LIBRARY, je la cherche donc dans C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64, Je ne peux pas obtenir le fichier dont le nom est nppi.lib , donc juste pour un test, je crée un fichier vide et le nomme nppi.lib , comme je suppose, j’ai travaillé, mais en fait, cela ne suffisait pas, le test ne pouvait s'empêcher de compiler ouvertement, de plus, j’ai découvert que j’avais CUDA v8, et j’ai eu la lib nppi.lib dans C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64; donc je change mon chemin de l'environnement,

CUDA_TOOLKIT_ROOT_DIR C:/Programmes/NVIDIA GPU Computing Toolkit/CUDA/v8.0 Puis je l’ai reconfiguré. ça a marché!!

0
Chuckie Pan