web-dev-qa-db-fra.com

Pourquoi ne peut-on pas trouver libcudart.so.4 lors de la compilation des échantillons CUDA sous Ubuntu?

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?

26
Alex

essayer:

32 bits: Sudo ldconfig /usr/local/cuda/lib

64 bits: Sudo ldconfig /usr/local/cuda/lib64

à votre santé

79
Edgar

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.

12
sj755

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!

6
Jaime.Fernandez

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.

5
Jerome Berryhill

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
2
surendran
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
1
rodms

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

0
dzhwinter

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 ...
0
user9869932