«/ Usr / bin / ld: impossible de trouver -lcudart»


12

Je suis novice en Ubuntu et j'utilise Ubuntu 14.04 64 bits. Je veux makeun projet qui utilise cudaet opencvj'ai obtenu l'erreur suivante lors de l'exécutioncmake . && 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

Ceci est la sortie 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

libcudartexiste /usr/local/cuda/lib64et j'ai également ajouté au chemin de la bibliothèque:

echo $LD_LIBRARY_PATH
/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:

C'est la sortie 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

Que dois-je faire cette ldrecherche dans le /usr/local/cuda/lib64chemin pour trouver libcudart?


pouvez-vous s'il vous plait ls /usr/local/cuda/lib64?
AlexGreg

La même question m'est aussi arrivée. Référence de l'article: [Debian compilant des exemples OpenCV avec IPP: / usr / bin / ld: impossible de trouver -llibsvml.so collect2: erreur: ld a renvoyé 1 état de sortie.] [1] [1]: stackoverflow.com/questions/ 24234961 /…
hellomzhxlp

Réponses:


21

Faites un lien symbolique vers l' libcudaendroit où vous le ldrecherchez.

sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so

11

LD_LIBRARY_PATHest utilisé pour modifier le comportement de l' ldconfigoutil et des outils associés lors de la recherche des bibliothèques, au moment de l'exécution.

L' ldoutil de l'éditeur de liens n'utilise pas cette variable. Si vous souhaitez utiliser une bibliothèque située dans un répertoire non standard, vous devez utiliser le -Lparamètre de la commande, comme ceci:

ld -lcuda -L/usr/local/cuda/lib64

Si vous avez téléchargé et un projet existant et ne savez pas comment modifier le ou les Makefile (s) existant (s) sans interrompre la compilation entière, vous pouvez exécuter make de la manière suivante:

export LDFLAGS=-L/usr/local/cuda/lib64
make

La variable LDFLAGS (qui peut également être définie dans le Makefile), est utilisée pour passer des arguments spécifiques à l'éditeur de liens ( ld) lorsqu'elle est lancée par les instructions de compilation.


1
Je suis arrivé ld: warning: cannot find entry symbol _start; not setting start addressquand j'ai couruld -lcuda -L/usr/local/cuda/lib64
Arash

@Arash: avez-vous installé la version de libcuda demandée par le projet que vous essayez de compiler?
Benoit

même problème que @Arash et oui j'ai la bonne version de libcuda
Mohsin Bukhari

2

Vous pouvez créer des liens au lieu d'ajouter les chemins:

ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/

je n'ai pas / usr / local / lib64 /, j'ai / usr / local / lib /
Arash

1

J'ai corrigé ça! Accédez à votre makefile et changez

/usr/local/cuda/

à

/usr/local/cuda-7.0

(si c'est ce que tu as)

Ça a marché pour moi


0

Résolu

git clone https://github.com/inducer/pycuda.git
cd pycuda
sudo configure --cuda-root=/usr/lib/cuda-10.1

sudo ln -s /usr/lib/cuda-10.1/targets/x86_64-linux/include src/cpp/

OU copiez tous les fichiers d'en-tête de /usr/lib/cuda-10.1/targets/x86_64-linux/include vers / src / cpp /

Cela a fonctionné pour moi sur Pop-OS 19.10

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.