Sono novizio di Ubuntu e utilizzo di Ubuntu 14.04 a 64 bit. Voglio make
un progetto che usi cuda
e opencv
Ho avuto il seguente errore durante l’esecuzione di cmake . && make
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
Questo è l’output di 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
esiste in /usr/local/cuda/lib64
e ho anche aggiunto al percorso della libreria:
echo $LD_LIBRARY_PATH /usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:
Questo è l’output di 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
Cosa devo fare che ld
cerchi nel percorso /usr/local/cuda/lib64
per trovare libcudart
?
Crea un link simbolico a libcuda
dove ld
sta cercando.
sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so
LD_LIBRARY_PATH
viene utilizzato per modificare il comportamento di ldconfig
e degli strumenti correlati durante la ricerca delle librerie, al momento dell’esecuzione.
Lo strumento ld
linker non usa questa variabile. Se si desidera utilizzare una libreria situata in una directory non standard, è necessario utilizzare il parametro -L
del comando, in questo modo:
ld -lcuda -L/usr/local/cuda/lib64
Se hai scaricato e un progetto esistente e non sai come modificare i Makefile esistenti senza interrompere l’intera compilazione, puoi eseguire la procedura come segue:
export LDFLAGS=-L/usr/local/cuda/lib64 make
La variabile LDFLAGS (che può essere anche definita nel Makefile), viene utilizzata per passare argomenti specifici al linker ( ld
) quando avviata dalle istruzioni di compilazione.
Puoi creare collegamenti invece di aggiungere i percorsi:
ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/ ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
Ho risolto questo! Vai al tuo makefile e cambia
/usr/local/cuda/
a
/usr/local/cuda-7.0
(se è quello che hai)
Ha funzionato per me