Die Bibliothek kann im Verzeichnis LD_LIBRARY_PATH nicht gefunden werden.

Die Bibliothek kann im Verzeichnis LD_LIBRARY_PATH nicht gefunden werden.

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:

  1. Ja, ich exportiere die Variable
  2. 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.
  3. 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

  1. Haben Sie LD_LIBRARY_PATHaus der Shell exportiert, in der Sie das Programm ausführen?

  2. Sind sowohl das Programm als auch die gemeinsam genutzte Bibliothek 64-Bit-Binärdateien (oder beide 32-Bit-Binärdateien)?

  3. Was ist die Ausgabe von ldd program, wo programist 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.

verwandte Informationen