Crie um link simbólico para libcuda
, onde ld
está pesquisando.
sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so
Eu sou novato no Ubuntu e uso o Ubuntu 14.04 de 64 bits. Eu quero make
um projeto que usa cuda
e opencv
Eu recebi o seguinte erro ao executar cmake . && make
Linking CXX executable ground_estimation
/usr/bin/ld: cannot find -lcudart
collect2: error: ld returned 1 exit status
make[2]: *** [ground_estimation] Error 1
make[1]: *** [CMakeFiles/ground_estimation.dir/all] Error 2
make: *** [all] Error 2
Esta é a saída de ld -lcudart --verbose
attempt to open /usr/x86_64-linux-gnu/lib64/libcudart.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libcudart.a failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //usr/local/lib64/libcudart.so failed
attempt to open //usr/local/lib64/libcudart.a failed
attempt to open //lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //lib64/libcudart.so failed
attempt to open //lib64/libcudart.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //usr/lib64/libcudart.so failed
attempt to open //usr/lib64/libcudart.a failed
attempt to open //usr/local/lib/libcudart.so failed
attempt to open //usr/local/lib/libcudart.a failed
attempt to open //lib/libcudart.so failed
attempt to open //lib/libcudart.a failed
attempt to open //usr/lib/libcudart.so failed
attempt to open //usr/lib/libcudart.a failed
libcudart
existe em /usr/local/cuda/lib64
e também adicionei ao caminho da biblioteca:
echo $LD_LIBRARY_PATH
/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:
Esta é a saída de ls /usr/local/cuda/lib64
:
libcublas_device.a libcufftw.so.6.0.37 libnppi.so.6.0
libcublas.so libcuinj64.so libnppi.so.6.0.37
libcublas.so.6.0 libcuinj64.so.6.0 libnpps.so
libcublas.so.6.0.37 libcuinj64.so.6.0.37 libnpps.so.6.0
libcudadevrt.a libcurand.so libnpps.so.6.0.37
libcudart.so libcurand.so.6.0 libnvblas.so
libcudart.so.6.0 libcurand.so.6.0.37 libnvblas.so.6.0
libcudart.so.6.0.37 libcusparse.so libnvblas.so.6.0.37
libcudart_static.a libcusparse.so.6.0 libnvToolsExt.so
libcufft.so libcusparse.so.6.0.37 libnvToolsExt.so.1
libcufft.so.6.0 libnppc.so libnvToolsExt.so.1.0.0
libcufft.so.6.0.37 libnppc.so.6.0 libOpenCL.so
libcufftw.so libnppc.so.6.0.37 libOpenCL.so.1
libcufftw.so.6.0 libnppi.so
O que devo fazer para que ld
pesquise /usr/local/cuda/lib64
caminho para encontrar libcudart
?
Crie um link simbólico para libcuda
, onde ld
está pesquisando.
sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so
LD_LIBRARY_PATH
é usado para modificar o comportamento do ldconfig
e das ferramentas relacionadas ao procurar as bibliotecas, em tempo de execução.
A ferramenta de vinculação ld
não usa essa variável. Se você quiser usar uma biblioteca localizada em um diretório não padrão, você tem que usar o parâmetro -L
do comando, assim:
ld -lcuda -L/usr/local/cuda/lib64
Se você fez o download de um projeto existente e não sabe como modificar o (s) Makefile (s) existente (s) sem quebrar toda a compilação, você pode executar o make da seguinte maneira:
export LDFLAGS=-L/usr/local/cuda/lib64
make
A variável LDFLAGS (que também pode ser definida no Makefile) é usada para passar argumentos específicos para o vinculador ( ld
) quando lançada pelas intruções de compilação.
Você pode criar links em vez de adicionar os caminhos:
ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
Eu consertei isso! Vá para o seu makefile e mude
/usr/local/cuda/
para
/usr/local/cuda-7.0
(se é isso que você tem)
Funcionou para mim