[c++] Perché non è possibile trovare libcudart.so.4 durante la compilazione degli esempi CUDA in Ubuntu?


Answers

Per prima cosa è necessario concatenare i percorsi ai binari e alle librerie CUDA. Questo è fatto semplicemente aggiungendo le seguenti righe al tuo file .bashrc.

export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=:/usr/local/cuda/lib64

Se si utilizza un sistema operativo a 32 bit, cambiare lib64 in lib

Secondo, dovevano esserci alcuni file di oggetti condivisi installati in / usr / lib o / usr / lib64, a seconda del sistema operativo in uso. Questi file oggetto dovrebbero essere contenuti in una directory chiamata "nvidia". I due file che ci interessano sono nomi libcuda.so.drivernumber e libOpenCL.so.somenumber. Per distinguere tra i file di oggetti condivisi effettivi basta usare ls -l . I collegamenti simbolici mostreranno a cosa stanno effettivamente collegando.

Come root, eseguire i seguenti comandi:

ln -s /usr/lib64/nvidia/libcuda.so.somenumber /usr/lib64/libcuda.so
ln -s /usr/lib64/nvidia/libOpenCL.so.somenumber /usr/lib64/libOpenCL.so

Questo dovrebbe consentire di compilare tutte le fonti nell'SDK.

A partire da Cuda 5.5 e Ubuntu 12.04 / 12.10, il comando sopra diventa (notare le modifiche alle directory di Ubuntu e Cuda) per 64 bit

ln -s /usr/local/cuda/lib64/libcuda.so.5.5 /usr/lib/libcuda.so.5.5

Cioè, le cartelle lib su Ubuntu a partire dalla 12.04 sono lib32 e lib; il 64 è implicito e cuda 5.5 e versioni successive ora si installa in una directory diversa.

Question

Sto cercando di far funzionare i miei campioni CUDDK, ma ottengo il seguente errore:

./bandwidthTest: error while loading shared libraries:
                 libcudart.so.4: cannot open shared object file:
                 No such file or directory

Perché posso compilare l'esempio con successo, ma non eseguirlo? C'è un modo per specificare manualmente il percorso della libreria di runtime CUDA?




Nel mio caso stavo eseguendo un'applicazione usando MPI. L'errore era:

libcudart.so.7: cannot open shared object file

CUDA è stato installato correttamente in tutti i nodi. Inoltre, come nelle risposte precedenti, le variabili $ PATH e $ LD_LIBRARY_PATH puntavano rispettivamente al binario e alle librerie.

Il passaggio del $ PATH e $ LD_LIBRARY_PATH nel comando MPI ha risolto il problema.

mpirun -x PATH=$PATH -x LD_LIBRARY_PATH=$LD_LIBRARY_PATH ...



LD_LIBRARY_PATH è fortemente deprecato. Potrebbe rovinare altri programmi e altri potrebbero ripristinarli. Dovrebbe essere usato solo per sovrascrivere temporaneamente i percorsi permanenti a scopo di test (non prendere la parola, google).

Invece, aggiungi una riga con la tua directory cuda lib su /etc/ld.so.conf, dopo ogni linea esistente.

Ad esempio, se hai installato su / usr / local / cuda, dovrai aggiungere

32-bit: / usr / local / cuda / lib

64-bit: / usr / local / cuda / lib64

Salva ed esegui ldconfig. Questo dovrebbe risolvere in modo permanente il problema.

I collegamenti simbolici sono probabilmente già impostati dall'installazione. In caso contrario, aggiungili come consigliato da Alex.

Nota - Ho ricevuto degli errori che fanno riferimento a / lib, ma ho dovuto aggiungere lib64 per correggerli.




creare un file nvidia_settings.conf in /etc/ld.so.conf.d/ e aggiungere il percorso alle librerie nel file nvidia_settings.conf

 /usr/local/cuda/lib64
 /usr/local/cuda/lib

Ora per aggiornare le modifiche eseguire il seguente comando:

sudo ldconfig



Links