Ich versuche, die Installation von CUDA zu überprüfen und stoße dabei auf einige Probleme. Ich habe alle Beispiele, die mit dem GPU Computing SDK geliefert werden, erfolgreich erstellt. Wenn ich jedoch versuche, deviceQuery auszuführen, erhalte ich die Fehlermeldung, dass libcudart.so.4 nicht gefunden werden kann.
Jedoch:
echo $LD_LIBRARY_PATH
kehrt zurück
/usr/local/cuda/lib64
In diesem Verzeichnis befindet sich eine Datei:
libcudart.so.4
Welche anderen Fehler könnten dazu führen, dass die Bibliothek nicht gefunden wird?
EDIT für Frans Antwort:
- Ja, ich exportiere die Variable
- Ich bin nicht sicher, ob das Programm 64-Bit ist, es war jedoch Teil einer 64-Bit-SDK-Installation, daher gehe ich davon aus, dass es 64-Bit ist.
Ausgabe von ldd:
#ldd deviceQuery linux-vdso.so.1 => (0x00007fff94ecc000) libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f2d4658a000) libcuda.so.1 => /usr/lib64/libcuda.so.1 (0x00007f2d45b1e000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000037f1200000) libm.so.6 => /lib64/libm.so.6 (0x00000037e5e00000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000037f0600000) libc.so.6 => /lib64/libc.so.6 (0x00000037e5600000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037e5a00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000037e5200000) librt.so.1 => /lib64/librt.so.1 (0x00000037e6200000) libz.so.1 => /lib64/libz.so.1 (0x00000037e6e00000) /lib64/ld-linux-x86-64.so.2 (0x00000037e4e00000)
Ich habe festgestellt, dass ich es als normaler Benutzer ausführen kann, aber dies führt dazu, dass es fehlschlägt, da der Benutzer keinen Zugriff auf die GPU hat. Das Ausführen mit sudo verursacht den Fehler „Fehlende Datei“.
Läuft:
sudo ldd deviceQuery
bestätigt das Fehlen von libcudart.so.4 in der zweiten Zeile der Ausgabe.
Antwort1
Haben Sie
LD_LIBRARY_PATH
aus der Shell exportiert, in der Sie das Programm ausführen?Sind sowohl das Programm als auch die gemeinsam genutzte Bibliothek 64-Bit-Binärdateien (oder beide 32-Bit-Binärdateien)?
Was ist die Ausgabe von
ldd program
, woprogram
ist das Programm, das die Bibliothek zur Laufzeit nicht finden kann?
Antwort2
Wenn Sie aus dem Quellcode erstellen, haben Sie die Möglichkeit, es so zu erstellen, dass es einen vorhandenen Bibliothekspfad über --prefix= oder --libdir= verwendet. Andernfalls können Sie:
- fügen Sie /usr/local/cuda/lib64 zum LD_LIBRARY_PATH in /etc/profile hinzu
- verschieben Sie es manuell (zum Beispiel nach /usr/local/) und erstellen Sie einen symbolischen Link für /usr/local/cuda nach /usr/local
- verwenden Sie LDPRELOAD, um die fehlenden Bibliotheken manuell vorzuladen
Nur eine kurze Erinnerung zu LD_LIBRARY_PATH – bedenken Sie, dass der dynamische Linker umso mehr durchsuchen muss, um den Pfad zu finden, je mehr Sie hinzufügen.