2013-06-13 4 views
6

Wenn ich .cu-Datei mit nvcc 5.0 kompilieren, gibt der Compiler mir folgende Informationen.überspringen inkompatibel libcudart.so bei der Suche nach -lcudart

/usr/bin/ld: unvereinbar /usr/local/cuda-5.0/lib/libcudart.so Überspringen bei der Suche nach -lcudart

Es scheint entweder eine Warnung oder ein Fehler. Ich weiß nicht, was los ist.

Gibt es jemanden, der mehr über diese Informationen weiß?

+0

Versuchen Sie, einen 64-Bit-Code zu kompilieren? Wenn dies der Fall ist, müssen Sie eine Verknüpfung mit der 64-Bit-Version herstellen, die sich in '/ usr/local/cuda-5.0/lib64/libcudart.so' befinden muss. – BenC

Antwort

10

Diese Warnung tritt häufig auf, wenn versucht wird, einen 64-Bit-Code mit einer 32-Bit-Bibliothek zu verknüpfen, siehe folgende Frage: Skipping Incompatible Libraries at compile.

Sie benötigen 2 Bibliotheksdateien zu unterscheiden:

  • $CUDA_HOME/lib/libcudart.so, die 32-Bit-Version der cudart Bibliothek.
  • $CUDA_HOME/lib64/libcudart.so, die 64-Bit-Version der cudart-Bibliothek.

(in Ihrem Fall $CUDA_HOME ist /usr/local/cuda-5.0)

Grundsätzlich findet der Linker die 32-Bit-Bibliothek zuerst (-L Optionen, um gesucht werden) und gibt diese Warnung auch wenn es um die richtigen zu finden, endet Bibliothek.

Sie müssen wahrscheinlich $CUDA_HOME/lib64 auf Ihre LD_LIBRARY_PATH Umgebungsvariable hinzuzufügen, bevor $CUDA_HOME/lib so dass ld kann die richtige Bibliothek für Ihre 64-Bit-Architektur vor der 32-Bit-Version.

+1

Danke. Mein funktionierendes Betriebssystem ist 64-Bit, also wird mein gesamter Code kompiliert und mit 64-Bit verlinkt. Es ist seltsam, dass die 64-Bit-CUDA5.0 32-Bit-Librarys enthält. – konjac

+1

Auf einem 64-Bit-Betriebssystem können Sie auch 32-Bit-Anwendungen erstellen und ausführen, daher benötigen Sie dafür den 32-Bit-Befehl 'libcudart.so'. – BenC

+1

Ich habe genau das gleiche Problem zu haben. Mein 'LD_LIBRARY_PATH' hat' lib64' vor 'lib', das scheint auf meinem System nicht zu funktionieren. Irgendwelche Ideen? –

Verwandte Themen