c - fatal error : cuda. h:没有那个文件或目录

标签 c linux cuda nvidia

我在我的电脑上成功安装了 CUDA 8.0,我可以通过在我的 Ubuntu 16.10 中运行以下命令来查看它的文件:

$ sudo find / -name nvcc

/usr/local/cuda-8.0/bin/nvcc

$ sudo find / -name cuda

/usr/local/cuda
/usr/local/cuda-8.0/targets/x86_64-linux/include/thrust/system/cuda
/usr/share/doc/cuda
/usr/include/nvidia-367/cuda

然后,我得到了以下源代码(has_cuda.c)来检查是否安装了CUDA:

#include<cuda.h>

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

但是运行这段代码会返回以下错误:

$ gcc has_cuda.c 

has_cuda.c:1:17: fatal error: cuda.h: No such file or directory
#include<cuda.h>
             ^
compilation terminated.

我在我的目录中查找 cuda.h,并在以下位置找到了它们:

$ sudo find / -name cuda.h

/usr/local/cuda-8.0/targets/x86_64-linux/include/cuda.h
/usr/include/nvidia-367/cuda/cuda.h
/usr/include/linux/cuda.h
/usr/src/linux-headers-4.8.0-22/include/linux/cuda.h
/usr/src/linux-headers-4.8.0-22/include/uapi/linux/cuda.h
/usr/src/linux-headers-4.8.0-32/include/linux/cuda.h
/usr/src/linux-headers-4.8.0-32/include/uapi/linux/cuda.h

我在这方面很菜鸟,那么,会发生什么?我是否必须导出任何变量以指出 cuda.h 在哪里?我该怎么做?

最佳答案

正确的包含头文件不是cuda.h而是cuda_runtime.h,假设你想使用gcc作为编译器对于这段代码。正如另一个答案所指出的,您可以只使用 nvcc (它已经安装在您的机器上),它根本不需要此代码的任何包含 header 。

如果您想使用nvcc,您可能应该确保设置了适当的PATH 环境变量。 linux install guide 中包含此信息和其他有用信息.

所以如果你像这样修改你的代码:

#include <cuda_runtime.h>

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

你应该能够使用像这样的命令成功编译它:

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

-I 开关之后的路径应该包含您机器上的 cuda_runtime.h 的路径。通常会像上面那样设置,但我不确定你的机器上是否设置了 cuda 符号链接(symbolic link),而且看起来你的 include 目录可能位于一个不寻常的地方,即

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

但是您可以使用 find 就像您一直在做的那样找到它。

同样,-L 开关之后的路径需要是您的 cuda lib64 目录的路径,该目录将包含 libcudart.so 及其同类文件。同样,这通常会在我显示的路径上进行符号链接(symbolic link),但您的机器安装可能不符合我的期望。您应该能够使用 find 找到正确的路径。

如另一个答案所示,如果您使用 nvcc(您已经找到),则无需显式选择 -I-L 路径。完成此工作的最简单方法是将文件从 has_cuda.c 重命名为 has_cuda.cu,然后您应该能够像这样编译:

nvcc has_cuda.cu -o has_cuda

最后,目前 Ubuntu 16.10 不是官方支持的 CUDA 发行版,因此它在您的机器上的安装方式可能有些出乎意料。我鼓励您阅读之前链接的安装指南,因为它包含有关安装后设置步骤的有用信息,例如设置环境变量,以及如何“验证”CUDA 安装。

任何时候你运行 CUDA 代码,遇到任何问题,确保使用 proper cuda error checking并使用 cuda-memcheck 运行您的代码,如下所示:

cuda-memcheck ./has_cuda

即使您不理解报告的错误信息,它也可能对那些试图帮助您的人有用。

关于c - fatal error : cuda. h:没有那个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307756/

相关文章:

python - 如何使用ssh执行远程脚本

c - 与 C 中的函数传递的数组一起堆叠

c++ - 增加 eclipse CDT 中的堆栈大小?

c - 使用 malloc 声明变量如何导致丢失位?

linux - 在 Linux 中以编程方式设置 Flash 安全性

cuda - 如何在不隐式调用 'copy' 的情况下初始化 CUDA 推力向量?

.net - .NET 中的 CUDA 全局内存释放问题

cuda - CUDA中二维共享内存是如何排列的

将字符串从小写转换为大写 段错误

objective-c - 将 Objective C 转换为 C 矩阵操作