J'essaie d'exécuter mes exemples de SDK Cuda, mais j'obtiens l'erreur suivante:
./bandwidthTest: error while loading shared libraries:
libcudart.so.4: cannot open shared object file:
No such file or directory
Pourquoi puis-je compiler l'exemple avec succès, mais pas l'exécuter? Existe-t-il un moyen de spécifier manuellement le chemin d'accès à la bibliothèque d'exécution CUDA?
essayer:
32 bits: Sudo ldconfig /usr/local/cuda/lib
64 bits: Sudo ldconfig /usr/local/cuda/lib64
à votre santé
Tout d'abord, il vous faut concaténer les chemins d'accès aux binaires et bibliothèques CUDA. Cela se fait simplement en ajoutant les lignes suivantes à votre fichier .bashrc.
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=:/usr/local/cuda/lib64
Si vous utilisez un système d'exploitation 32 bits, remplacez lib64 par lib
Deuxièmement, certains fichiers d'objets partagés devraient avoir été installés dans/usr/lib ou/usr/lib64, selon votre système d'exploitation. Ces fichiers objets doivent être contenus dans un répertoire appelé "nvidia". Les deux fichiers qui nous concernent sont les noms libcuda.so.drivernumber et libOpenCL.so.somenumber. Pour différencier les fichiers d'objets partagés réels, utilisez simplement ls -l
. Les liens symboliques montreront à quoi ils sont réellement liés.
En tant que root, exécutez les commandes suivantes:
ln -s /usr/lib64/nvidia/libcuda.so.somenumber /usr/lib64/libcuda.so
ln -s /usr/lib64/nvidia/libOpenCL.so.somenumber /usr/lib64/libOpenCL.so
Cela devrait vous permettre de compiler toutes les sources dans le SDK.
Depuis Cuda 5.5 et Ubuntu 12.04/12.10, la commande ci-dessus devient (notez les changements de répertoire Ubuntu et Cuda) pour 64 bits
ln -s /usr/local/cuda/lib64/libcuda.so.5.5 /usr/lib/libcuda.so.5.5
Autrement dit, les dossiers lib sur Ubuntu à partir du 12.04 sont lib32 et lib; le 64 est implicite et cuda 5.5 et supérieur s'installe maintenant dans un répertoire différent.
1 erreur lors du chargement des bibliothèques partagées: libcudart.so.6.0: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type
32-bit: Sudo ldconfig /usr/local/cuda/lib
64-bit: Sudo ldconfig /usr/local/cuda/lib64
(voir: http://blog.csdn.net/shenchong721/article/details/21529295 )
Travaille pour moi!
LD_LIBRARY_PATH est fortement déconseillé. Il peut gâcher d'autres programmes et d'autres peuvent le réinitialiser. Il ne doit être utilisé que pour remplacer temporairement les chemins d'accès permanents à des fins de test (ne prenez pas mon Word, google).
Au lieu de cela, ajoutez une ligne avec votre répertoire lib cuda sur /etc/ld.so.conf, après toutes les lignes existantes.
Par exemple, si vous avez installé sur/usr/local/cuda, vous devrez ajouter
32 bits:/usr/local/cuda/lib
64 bits:/usr/local/cuda/lib64
Enregistrez et exécutez ldconfig. Cela devrait résoudre définitivement le problème.
Les liens symboliques sont probablement déjà mis en place par l'installation. Sinon, ajoutez-les comme Alex l'a conseillé.
Remarque - J'ai reçu des erreurs référençant/lib, mais j'ai dû ajouter lib64 pour les corriger.
créez un fichier nvidia_settings.conf dans /etc/ld.so.conf.d/ et ajoutez le chemin d'accès aux bibliothèques dans le fichier nvidia_settings.conf
/usr/local/cuda/lib64
/usr/local/cuda/lib
Maintenant, pour mettre à jour les modifications, exécutez la commande suivante:
Sudo ldconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib
ou si vous exécutez cuda-5.0 sur une machine 64 bits
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-5.0/lib64
la bibliothèque de recherche du système avec l'outil ld. comme le dit la réponse du haut, 64 bits: Sudo ldconfig/usr/local/cuda-xx/lib64 ;; xx est la bibliothèque de cuda
Dans mon cas, j'exécutais une application utilisant MPI. L'erreur était:
libcudart.so.7: cannot open shared object file
CUDA a été correctement installé dans tous les nœuds. De plus, comme dans les réponses précédentes, les variables $ PATH et $ LD_LIBRARY_PATH pointaient respectivement vers le binaire et les bibliothèques.
Le passage de $ PATH et $ LD_LIBRARY_PATH dans la commande MPI a résolu le problème.
mpirun -x PATH=$PATH -x LD_LIBRARY_PATH=$LD_LIBRARY_PATH ...