2012-05-30 30 views
25

Estoy intentando conseguir mis muestras Cuda SDK correr, pero me sale el siguiente error:¿Por qué no se puede encontrar libcudart.so.4 al compilar los ejemplos de CUDA en Ubuntu?

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

¿Por qué puedo compilar el ejemplo con éxito, pero no ejecutarlo? ¿Hay alguna manera de especificar la ruta a la biblioteca de tiempo de ejecución de CUDA manualmente?

+0

¿Cómo compiló el código? – Adam27X

+0

¿Recordó actualizar sus variables de entorno LD_LIBRARY_PATH y PATH en su archivo .bashrc, o en cualquier archivo de configuración asociado con su shell? – sj755

+0

Suena como que probablemente se cambió el nombre de la lib, ¿hay algo con "libcudard" en su nombre en la carpeta/usr/lib? – Lalaland

Respuesta

12

Primero estos que necesita es concatenar las rutas a los binarios y bibliotecas de CUDA. Esto se hace simplemente agregando las siguientes líneas a su archivo .bashrc.

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

Si está utilizando un cambio de sistema operativo lib64 de 32 bits para lib

En segundo lugar, debería haber habido algunos archivos de objetos compartidos instalados en/o/usr/lib64 usr/lib, en función de su sistema operativo. Estos archivos de objeto deben estar contenidos en un directorio llamado "nvidia". Los dos archivos que nos preocupan son los nombres libcuda.so.drivernumber y libOpenCL.so.somenumber. Para diferenciar entre los archivos de objetos compartidos reales, simplemente use ls -l. Los enlaces simbólicos mostrarán a qué se están vinculando.

Como root, ejecute los siguientes comandos:

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

que debe permitir a compilar todas las fuentes en el SDK.

A partir de Cuda 5.5 y Ubuntu 12.04/12.10, el comando anterior se convierte en (notar los cambios en el directorio de Ubuntu y Cuda) para 64 bits

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

Es decir, las carpetas lib en Ubuntu a partir de 12.04 son lib32 y lib; el 64 es implícito, y cuda 5.5 y superior ahora se instala en un directorio diferente.

+0

ln: crear un enlace simbólico '/usr/lib/libcuda.so ': el archivo existe – Alex

+0

el enlace simbólico no funciona para mí. ln -us /usr/lib/nvidia/libcuda.so.295.41 /usr/lib/libcuda.so ln -s /usr/lib/nvidia/libOpenCL.so.1.0.0 /usr/lib/libOpenCL.so – Alex

+0

@ Alex ¿Puedes averiguar si /usr/lib/libcuda.so es un enlace simbólico y con qué se vincula? Si se está enlazando con el lugar correcto, simplemente intente crear un enlace simbólico al archivo de objetos compartidos de OpenCL, si aún no existe. – sj755

5

LD_LIBRARY_PATH está muy desaprobado. Puede arruinar otros programas y otros pueden restablecerlo. Solo se debe utilizar para anular temporalmente las rutas permanentes con fines de prueba (no tome mi palabra, googlee).

En su lugar, agregue una línea con su directorio cuda lib en /etc/ld.so.conf, después de cualquier línea existente.

Por ejemplo, si se ha instalado en// local/cuda usr, tendrá que añadir

de 32 bits:/usr/local/CUDA/lib

de 64 bits:/usr/local/cuda/lib64

Guardar y ejecutar ldconfig. Esto debería solucionar el problema de forma permanente.

Los enlaces simbólicos probablemente ya estén configurados por la instalación. Si no, añádalos como aconsejó Alex.

Nota - Recibí errores haciendo referencia a/lib, pero necesitaba agregar lib64 para corregirlos.

79

intento:

de 32 bits: sudo ldconfig /usr/local/cuda/lib

64-bits: sudo ldconfig /usr/local/cuda/lib64

aplausos

+1

funciona para mí también, ubuntu 12.04 :) – SlimJim

+0

wow gracias. Estaba usando Theano y obtengo: "Error al compilar cuda_ndarry.cu: libcublas.so.6.0: no se puede abrir el archivo de objeto compartido: No existe tal archivo o directorio" esto lo solucionó: D –

+1

Está relacionado con 'export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/usr/local/cuda/lib64'? – SolessChong

1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib 

o si está ejecutando cuda-5.0 en un equipo de 64 bits

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-5.0/lib64 
2

crear un archivo nvidia_settings.conf en /etc/ld.so.conf.d/ y añadir la ruta a las librerías en el archivo nvidia_settings.conf

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

ahora para actualizar los cambios ejecute el siguiente comando:

sudo ldconfig 
6

1 error al cargar bibliotecas compartidas: libcudart.so.6.0: no puede abrir archivo de objeto compartido: no existe el fichero o directorio

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

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

(refiera: http://blog.csdn.net/shenchong721/article/details/21529295)

¡Trabaja para mí!

+1

Recibo este error $ sudo ldconfig /usr/local/cuda-7.5/lib64 /sbin/ldconfig.real: /usr/local/cuda-7.5/lib64/libcudnn.so.4 no es un enlace simbólico –

0

el sistema encuentra la biblioteca con la herramienta ld. como dice la respuesta principal, 64-bit: sudo ldconfig/usr/local/cuda-xx/lib64 ;; xx es la biblioteca de CUDA

0

En mi caso estaba ejecutando una aplicación usando MPI. El error fue:

libcudart.so.7: cannot open shared object file 

CUDA se instaló correctamente en todos los nodos. Además, como en las respuestas anteriores, las variables $ PATH y $ LD_LIBRARY_PATH apuntaban al binario y a las bibliotecas, respectivamente.

Al pasar $ PATH y $ LD_LIBRARY_PATH en el comando MPI se solucionó el problema.

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