A biblioteca não está localizada com o diretório definido em LD_LIBRARY_PATH

2

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

No entanto:

echo $LD_LIBRARY_PATH

retorna

/usr/local/cuda/lib64

Dentro desse diretório é um arquivo:

libcudart.so.4

Quais outros tipos de erros podem causar a localização da biblioteca?

EDIT 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 supor que é
  3. Saída do 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 faz com que ele falhe, pois o usuário não tem acesso à GPU. Executá-lo com o sudo causa o erro de arquivo ausente.

Em exibição:

sudo ldd deviceQuery

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

    
por Godric Seer 31.05.2012 / 01:32

2 respostas

1
  1. Você exportou LD_LIBRARY_PATH do shell no qual você está executando o programa?

  2. Os binários de 64 bits do programa e da biblioteca compartilhada (ou ambos os binários de 32 bits)?

  3. Qual é a saída de ldd program , onde program é o programa que não consegue encontrar a biblioteca em tempo de execução?

por 31.05.2012 / 01:39
1

Se você está construindo a partir do código fonte, você tem a opção de construí-lo de tal forma que ele 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 as bibliotecas ausentes manualmente

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

    
por 31.05.2012 / 03:05