"/ Usr / bin / ld: -lcudart kann nicht gefunden werden"

12

Ich bin Ubuntu-Neuling und benutze Ubuntu 14.04 64-Bit. Ich möchte makeein Projekt, das verwendet cudaund opencvich habe die folgende Fehlermeldung beim Ausführencmake . && 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

Dies ist die Ausgabe von 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

libcudartexistieren in /usr/local/cuda/lib64und ich fügte auch zu Bibliothekspfad hinzu:

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

Dies ist die Ausgabe von 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

Was soll ich tun, ldum diese Suche im /usr/local/cuda/lib64Pfad zu finden libcudart?

Arash
quelle
können Sie bitte ls /usr/local/cuda/lib64?
AlexGreg
Die gleiche Frage ist mir auch passiert. Referenz aus dem Artikel: [Debian kompiliert OpenCV-Beispiele mit IPP: / usr / bin / ld: kann -llibsvml.so nicht finden. Collect2: Fehler: ld gab 1 Exit-Status zurück.] [1] [1]: stackoverflow.com/questions/ 24234961 /…
hellomzhxlp

Antworten:

20

Stellen Sie einen symbolischen Link zu libcudadem ldOrt her, an dem gesucht wird.

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

LD_LIBRARY_PATHwird verwendet, um das Verhalten der ldconfigund verwandter Tools bei der Suche nach Bibliotheken zur Ausführungszeit zu ändern .

Das ldLinker-Tool verwendet diese Variable nicht. Wenn Sie eine Bibliothek verwenden möchten, die sich in einem nicht standardmäßigen Verzeichnis befindet, müssen Sie den -LParameter des Befehls wie folgt verwenden:

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

Wenn Sie heruntergeladen und Projekt vorhandene und nicht weiß , wie die vorhandene Makefile (s) zu ändern , ohne die ganze Zusammenstellung zu brechen, können Sie laufen machen die folgende Art und Weise:

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

Die Variable LDFLAGS (die auch im Makefile definiert sein kann) wird verwendet, um bestimmte Argumente an den Linker ( ld) zu übergeben, wenn dieser von den Kompilierungsanweisungen gestartet wird.

Benoit
quelle
1
Ich bekam ld: warning: cannot find entry symbol _start; not setting start addressbeim Laufenld -lcuda -L/usr/local/cuda/lib64
Arash
@Arash: Hast du die Version von libcuda installiert, die von dem Projekt angefordert wurde, das du zu kompilieren versuchst?
Benoit
das gleiche Problem wie @Arash und ja, ich habe die richtige Version von libcuda
Mohsin Bukhari
2

Sie können Verknüpfungen erstellen, anstatt die Pfade hinzuzufügen:

ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
Chaos
quelle
Ich habe nicht / usr / local / lib64 /, ich habe / usr / local / lib /
Arash
1

Ich habe das behoben! Gehe zu deinem Makefile und ändere es

/usr/local/cuda/

zu

/usr/local/cuda-7.0

(wenn du das hast)

Es hat bei mir funktioniert

Antony Savvidi
quelle
0

Gelöst

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/

ODER kopieren Sie alle Header-Dateien von /usr/lib/cuda-10.1/targets/x86_64-linux/include nach / src / cpp /

Es funktionierte für mich unter Pop-OS 19.10

Ghanshyam Chandra
quelle