致命错误:cuda.h:没有这样的文件或目录

问题描述 投票:0回答:4

我在我的电脑上成功安装了 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 的位置吗?我该怎么做?

c linux cuda nvidia
4个回答
11
投票

正确的包含头文件不是

cuda.h
而是
cuda_runtime.h
,假设您想使用
gcc
作为此代码的编译器。正如另一个答案指出的那样,您可以只使用
nvcc
(它已经安装在您的计算机上),它根本不需要此代码的任何包含标头。

如果您想使用

nvcc
,您可能应该确保设置了适当的
PATH
环境变量。此信息和其他有用信息包含在 linux 安装指南中。

因此,如果您像这样修改代码:

#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
符号链接,而且看起来您的包含目录可能位于不寻常的位置,即

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

但是您可以使用

find
就像您一直在做的那样来定位它。

同样,

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

并且如另一个答案所示,如果您使用

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

nvcc has_cuda.cu -o has_cuda

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

每当您运行 CUDA 代码并遇到任何问题时,请务必使用 正确的 cuda 错误检查并使用 cuda-memcheck 运行代码,如下所示:

cuda-memcheck ./has_cuda

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


6
投票

我自己从未编译过 cuda 项目,但我认为您需要将库链接到编译器。

一些快速谷歌搜索表明 Nvidia 有编译器可以处理所有事情。所以你只需要安装它就可以了。它被称为 NVVC。安装后只需运行:

nvcc helloworld.cu -o hello.out

对于像这样的外部库,您几乎总是需要链接它们。您不必为标准库执行此操作,因为链接器已经知道在哪里可以找到它。


3
投票

当尝试安装 python cuda 包时

lietorch
,如果你看到
have fatal error: cuda.h: No such file or directory
cuda.h
存在时,运行以下命令:

pip install pycuda 

之后问题应该就解决了。


0
投票

安装提供 cuda.h 文件的软件包(cuda-cudart-dev):

示例:

dpkg --force-all -i cuda-cudart-dev-11-7_11.7.99-1_amd64.deb

© www.soinside.com 2019 - 2024. All rights reserved.