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:
- Sim, estou exportando a variável
- 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 é
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
Você exportou
LD_LIBRARY_PATH
do shell em que está executando o programa?O programa e a biblioteca compartilhada são binários de 64 bits (ou ambos os binários de 32 bits)?
Qual é o resultado de
ldd program
, ondeprogram
está 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.