La biblioteca no se encuentra en el directorio establecido en LD_LIBRARY_PATH

La biblioteca no se encuentra en el directorio establecido en LD_LIBRARY_PATH

Estoy intentando verificar la instalación de CUDA y tengo algunos problemas. He creado con éxito todos los ejemplos que vienen con el SDK de computación GPU. Sin embargo, cuando intento ejecutar deviceQuery, aparece un error que indica que no se puede encontrar libcudart.so.4.

Sin embargo:

echo $LD_LIBRARY_PATH

devoluciones

/usr/local/cuda/lib64

Dentro de ese directorio hay un archivo:

libcudart.so.4

¿Qué otro tipo de errores podrían estar provocando que no se localice la biblioteca?

EDITAR para la respuesta de Fran:

  1. Sí, estoy exportando la variable.
  2. No estoy seguro de si el programa es de 64 bits, sin embargo, vino como parte de una instalación de SDK de 64 bits, por lo que me gustaría asumir que lo es.
  3. Salida de ldd:

    #ldd deviceQuery
    linux-vdso.so.1 =>  (0x00007fff94ecc000)
    libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f2d4658a000)
    libcuda.so.1 => /usr/lib64/libcuda.so.1 (0x00007f2d45b1e000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000037f1200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000037e5e00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000037f0600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000037e5600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037e5a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000037e5200000)
    librt.so.1 => /lib64/librt.so.1 (0x00000037e6200000)
    libz.so.1 => /lib64/libz.so.1 (0x00000037e6e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000037e4e00000)
    

Descubrí que puedo ejecutarlo como un usuario normal, pero al hacerlo falla ya que el usuario no tiene acceso a la GPU. Ejecutarlo con sudo provoca el error de archivo faltante.

Correr:

sudo ldd deviceQuery

confirma la falta de libcudart.so.4 en la segunda línea del resultado.

Respuesta1

  1. ¿Exportaste LD_LIBRARY_PATHdesde el shell en el que estás ejecutando el programa?

  2. ¿Tanto el programa como la biblioteca compartida son binarios de 64 bits (o ambos binarios de 32 bits)?

  3. ¿Cuál es el resultado de ldd program, dónde programestá el programa que no puede encontrar la biblioteca en tiempo de ejecución?

Respuesta2

Si está compilando desde el código fuente, tiene la opción de compilarlo de modo que utilice una ruta de biblioteca existente a través de --prefix= o --libdir=. De lo contrario puedes:

  • agregue /usr/local/cuda/lib64 a LD_LIBRARY_PATH en /etc/profile
  • muévalo manualmente (a /usr/local/ por ejemplo) y cree un enlace simbólico para /usr/local/cuda a /usr/local
  • use LDPRELOAD para precargar las bibliotecas faltantes manualmente

Solo un recordatorio rápido sobre LD_LIBRARY_PATH: tenga en cuenta que cuantas más rutas agregue, más tendrá que revisar el vinculador dinámico para encontrarlas.

información relacionada