Wie kann ich gcc zwingen, in /usr/cuda/local/include nach cuda_runtime.h zu suchen?
Ich versuche, eine CUDA-Anwendung mit einem C-Wrapper zu kompilieren. Ich verwende Ubuntu 10.04.
Ich habe meine CUDA-Anwendung mit dem folgenden Befehl erfolgreich in eine .so-Datei kompiliert:
nvcc -arch=sm_11 -o libtest.so --shared -Xcompiler -fPIC main.cu
Wenn ich versuche, meine C-Wrapper-Datei mit dem folgenden Befehl zu kompilieren:
gcc -std=c99 -o main -L. -ltest main.c
Ich erhalte den Fehler:
error: cuda_runtime.h: No such file or directory
Ich habe überprüft, dass cuda_runtime.h tatsächlich in /usr/local/cuda/include vorhanden ist
Wenn Sie CMake verwenden
find_package(CUDA REQUIRED)
include_directories("${CUDA_INCLUDE_DIRS}")
Die Verwendung eines Schalters -I ermöglichte es gcc, die Datei cuda_runtime.h zu finden:
gcc -std=c99 -I/usr/local/cuda/include -o main -L. -ltest main.c
Wir haben CMake verwendet, aber es konnte die Header-Dateien immer noch nicht finden (vielleicht ist es die CMake-Version, die das Verzeichnis nicht finden konnte ./targets/x86_64-linux/include
oder weil wir mehrere CUDA-Versionen haben). Einstellung CPATH
und LD_LIBRARY_PATH
hat es für uns behoben:
export CPATH=/usr/local/cuda-10.1/targets/x86_64-linux/include:$CPATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH
Hinzufügen -isystem /usr/local/cuda-8.0/include
in CXX_INCLUDES in der flags.make-Datei.
Ich nehme an, Sie meinen /usr/local/cuda/include. Haben Sie versucht, einen Schalter -I zu Ihrer gcc-Befehlszeile hinzuzufügen? Beispiel: gcc -std=c99 -I/usr/local/cuda/include -o main -L. -ltest main.c
– Robert Crovella
31. Oktober 2012 um 21:22 Uhr
Wenn Sie nichts dagegen haben, posten Sie es bitte als Antwort auf Ihre Frage. Dann akzeptiere es oder ich werde die Antwort positiv bewerten. Vielen Dank.
– Robert Crovella
31. Oktober 2012 um 21:38 Uhr
Gibt es eine Option, damit es funktioniert, ohne -l hinzuzufügen? Eine Bibliothek gibt mir diesen Fehler
– Kelu
6. September 2016 um 10:45 Uhr