从命令提示符编译CUDA时出现错误

62

我正在尝试通过命令提示符在Windows 7上编译一个CUDA测试程序,我使用的命令是:

nvcc test.cu

但是我得到的只是这个错误:

nvcc fatal : Cannot find compiler 'cl.exe' in PATH

这个错误可能是由什么引起的?


2
如果在解决此问题后仍然出现“找不到corecrt.h”的错误,请查看https://dev59.com/D1oT5IYBdhLWcg3wrBG5。 - Alexander Pacha
7个回答

60

您需要将包含“cl.exe”文件的文件夹添加到路径环境变量中。例如:

C:\Program Files\Microsoft Visual Studio 10.0\VC\bin

编辑: 好的,请前往“我的电脑”->“属性”->“高级系统设置”->“环境变量”。在此查找列表中的“PATH”,并添加上述路径(或者您的cl.exe所在位置)。


1
好的,但是我该怎么添加它呢?我习惯在Linux上工作,所以现在对Windows的操作方式不熟悉... - GennSev
1
没事了,我只需将 --machine 32 作为参数传递给 nvcc 就可以摆脱它。 - GennSev
1
@Jackalope:你得到的cl.exe路径是哪个?它应该是以\bin结尾的路径。 - Tudor
2
尝试在bin目录中运行vcvars.bat。它会设置一些被cl.exe使用的环境变量。 - deathly809
1
@notgiorgi:变量名为PATH。只需在现有值的末尾附加cl.exe的路径即可。 - Tudor
显示剩余4条评论

36

对于新版的Visual Studio,cl.exe位于路径中 => C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64

x64适用于64位系统

x86适用于32位系统


那么,一个人必须将此路径添加到环境变量中的“Path”中,对吗? - J.A
@J.A 是的。我尝试将x64版本添加到系统路径中,它可以工作。 - RandyTek
2022年,位置在C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64。 - undefined

24

通过将这些选项添加到nvcc来解决此问题

nvcc x.cu ...   -ccbin "D:\Program Files\Microsoft Visual Studio 11.0\VC\bin"

例如,我的编译器是VS2012,而cl.exe在这个目录中。


你能澄清一下你所说的“编辑这个问题”是什么意思吗? - skrrgwasme
\VC\bin\文件夹添加到PATH环境变量对我没有起作用(Win7)。然而,您的解决方案完美地解决了我的问题!我正在尝试为MATLAB编译一些代码。谢谢! - Dev-iL
兄弟,学习CUDA工具包以了解所有这些选项并更好地工作。帮助和相互回答是我们的责任。谢谢你也。 - Prof. Hell
或者更近期的路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin - Garrett
有一种情况,即使路径条目或-ccbin都无法帮助时,构建x86的程序也会遇到问题。这种情况是因为nvcc.exe不支持给定版本的cl.exe(在我的情况下:来自CUDA 10.0.130的nvcc.exe无法使用VS2015中的cl.exe构建32位二进制文件)。 - StuporMundi

5

cl.exe 是微软的 C/C++ 编译器。所以问题在于你没有将其安装到命令行可以找到的位置。


1

nvcc只是该程序CUDA特定部分的前端。它必须调用完整的编译器来完成工作。在这种情况下,它找不到Visual Studio编译器'cl.exe'

检查路径,nvcc文档等。


1
通过将路径添加到环境变量中来解决此问题,这可能会根据您系统中安装的Visual Studio版本和使用的32位或64位系统略有不同。
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64

1
我使用的是与你相同版本的MSVC,但我仍然遇到了错误。如果我只运行 cl.exe,则不会出现错误。 - MindStudio

0

我看到这是一个旧问题,但最近在我的Visual Studio 2012中构建CUDA项目时遇到了这个错误。显然,我已经将我的CUDA项目更改为Nov 2012包,将其更改回通常默认的v110即可解决此错误。

在Visual Studio中,左键单击CUDA项目,->属性->配置属性->常规->平台工具集,并选择:Visual Studio 2012(v110)。

我可能可以使用Nov 2012包使其正常工作,但是CUDA代码不使用该包的任何其他功能,因此没有必要。(该包包含C++11的可变参数模板。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接