«/ 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?

Arash
la source
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
AlexGreg
la source
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.

Benoit
la source
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/
le chaos
la source
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

Antony Savvidi
la source
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

Ghanshyam Chandra
la source