GNU/Linux >> Tutoriales Linux >  >> Linux

Error fatal:cuda.h:No existe tal archivo o directorio

Nunca he compilado un proyecto cuda, pero creo que necesitarás vincular la biblioteca al compilador.

Algunas búsquedas rápidas en Google dicen que Nvidia tiene un compilador para esto que se encargará de todo. Entonces solo necesita instalar eso y debería estar listo para comenzar. Se llama NVVC. Una vez instalado simplemente ejecute:

nvcc helloworld.cu -o hello.out

Con bibliotecas externas como estas, casi siempre necesita vincularlas. No es necesario que lo haga para la biblioteca estándar porque el enlazador ya sabe dónde encontrarlo.


El archivo de cabecera de inclusión adecuado para esto no es cuda.h pero cuda_runtime.h , asumiendo que quieres usar gcc como compilador de este código. Como señala la otra respuesta, podría usar nvcc (que ya está instalado en su máquina) que no requeriría incluir encabezados para este código en absoluto.

Si quieres usar nvcc probablemente deberías asegurarte de que el PATH apropiado se establece la variable de entorno. Esta y otra información útil se encuentran en la guía de instalación de Linux.

Entonces, si modifica su código de esta manera:

#include <cuda_runtime.h>

int main ()
{
    int deviceCount;
    cudaError_t e = cudaGetDeviceCount(&deviceCount);
    return e == cudaSuccess ? deviceCount : -1;
}

Debería poder compilarlo con éxito usando un comando como este:

gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda

El camino después del -I el interruptor debe contener la ruta a cuda_runtime.h en su máquina. Normalmente, eso se configuraría como arriba, pero no estoy seguro si el cuda El enlace simbólico está configurado en su máquina, y también parece que su directorio de inclusión puede estar en un lugar inusual, es decir,

/usr/local/cuda-8.0/targets/x86_64-linux/include

pero puedes usar find tal como lo has estado haciendo para localizarlo.

Del mismo modo, la ruta después del -L switch debe ser la ruta a tu cuda lib64 directorio, que contendrá libcudart.so y sus primos. Una vez más, eso normalmente sería un enlace simbólico en la ruta que he mostrado, pero es posible que la instalación de su máquina no se ajuste a mis expectativas. Deberías poder usar find para localizar la ruta correcta.

Y como se indica en la otra respuesta, si usa nvcc (que ya ha localizado), no necesitará seleccionar explícitamente el -I y -L sendero. La forma más fácil de hacer que esto funcione es cambiar el nombre de su archivo de has_cuda.c a has_cuda.cu , entonces debería poder compilar así:

nvcc has_cuda.cu -o has_cuda

Finalmente, Ubuntu 16.10 no es una distribución con soporte oficial para CUDA en este momento, por lo que puede haber algunas cosas inesperadas sobre la forma en que se instaló en su máquina. Le animo a leer la guía de instalación vinculada anteriormente, ya que contiene información útil sobre los pasos de configuración posteriores a la instalación, como la configuración de variables de entorno y también cómo "verificar" la instalación de CUDA.

Cada vez que esté ejecutando códigos CUDA y tenga algún tipo de problema, asegúrese de usar la verificación de errores cuda adecuada y ejecute sus códigos con cuda-memcheck, así:

cuda-memcheck ./has_cuda

Incluso si no comprende la información de error notificada, puede ser útil para aquellos que intentan ayudarlo.


Linux
  1. Error:xenstore-read:xs_open:No existe tal archivo o directorio en DomU [Resuelto]

  2. Error:Xend Start – /proc/xen/capabilities:No existe tal archivo o directorio [Resuelto]

  3. error fatal openssl/evp.h:No existe tal archivo o directorio:[Resuelto]

  4. No se puede ejecutar No existe tal archivo o directorio [Fijar]

  5. Solucione el error fatal openssl err.h:no existe tal archivo o directorio [OpenCA]

arm-linux-gnu-gcc error fatal:stdio.h:No existe tal archivo o directorio

Bash:¿No existe tal archivo o directorio?

El comando conda generará un error:Intérprete incorrecto:no existe tal archivo o directorio

conda source deactivate :bash:deactivate:No existe tal archivo o directorio

touch:no se puede tocar `foo':No existe tal archivo o directorio

ssh-add regresa con:Error al conectar con el agente:No existe tal archivo o directorio