Biblioteca não localizada com diretório definido em LD_LIBRARY_PATH

Biblioteca não localizada com diretório definido em LD_LIBRARY_PATH

Estou tentando verificar a instalação do CUDA e estou enfrentando alguns problemas. Construí com sucesso todos os exemplos que vêm com o SDK de computação GPU. No entanto, quando tento executar o deviceQuery, recebo um erro dizendo que libcudart.so.4 não pode ser encontrado.

No entanto:

echo $LD_LIBRARY_PATH

retorna

/usr/local/cuda/lib64

Dentro desse diretório há um arquivo:

libcudart.so.4

Que outro tipo de erro poderia estar fazendo com que a biblioteca não fosse localizada?

EDITAR para a resposta de Fran:

  1. Sim, estou exportando a variável
  2. Não tenho certeza se o programa é de 64 bits, mas ele veio como parte de uma instalação do SDK de 64 bits, então gostaria de assumir que é
  3. Saída 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)
    

Descobri que posso executá-lo como um usuário normal, mas isso causa falha, pois o usuário não tem acesso à GPU. Executá-lo com sudo causa o erro de arquivo ausente.

Correndo:

sudo ldd deviceQuery

confirma a falta de libcudart.so.4 na segunda linha da saída.

Responder1

  1. Você exportou LD_LIBRARY_PATHdo shell em que está executando o programa?

  2. O programa e a biblioteca compartilhada são binários de 64 bits (ou ambos os binários de 32 bits)?

  3. Qual é o resultado de ldd program, onde programestá o programa que não consegue encontrar a biblioteca em tempo de execução?

Responder2

Se você estiver compilando a partir do código-fonte, terá a opção de compilá-lo de forma que use um caminho de biblioteca existente via --prefix= ou --libdir=. Caso contrário, você pode:

  • adicione /usr/local/cuda/lib64 ao LD_LIBRARY_PATH em /etc/profile
  • mova-o manualmente (para /usr/local/ por exemplo) e crie um link simbólico para /usr/local/cuda para /usr/local
  • use LDPRELOAD para pré-carregar manualmente as bibliotecas ausentes

Apenas um rápido lembrete sobre LD_LIBRARY_PATH - lembre-se de que quanto mais caminhos você adicionar, mais o vinculador dinâmico terá que procurar para encontrá-lo.

informação relacionada