我一直在尝试将.cu文件添加到我自己的(dll)win32项目中并使用Windows7上的VS2008进行编译。 我能够在cppIntegration示例项目中编译.cu,但在我的项目中我遇到了问题。
起初,我收到错误“不知道该怎么做”工具包......“。似乎nvcc遇到的问题是工具包在其路径中有空格。重命名NVIDIA工具包时文件夹没有空格,我得到了同样的错误,但现在它说“文件”,这是“程序文件”文件夹的一部分,也有一个空格。
请注意,在cppIntegration中它正常工作,尽管它具有完全相同的路径。 所以我将SymbLink工具包路径,现在我在项目中编译.cu文件时遇到了不同的错误(但不是在cppIntegration中)。 “无法找到指定的路径”。 我认为这指的是我只是SymbLinked的相同路径。
我相信我需要更改项目属性中的某些内容。也许我正在构建一个DLL的事实导致了这个问题。也许它必须用64位版本的CUDA做一些事情,而我用32位win32(也许?)。
谢谢。
更新
这是我在VS2008中编译时的输出。
Compiling with CUDA Build Rule... 1>"\MyCUDA\CUDA\v3.2\\bin\nvcc.exe"
-gencode =拱= compute_10,代码= \ “sm_10,compute_10 \” -gencode =拱= compute_20,代码= \ “sm_20,compute_20 \” - 机器32 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ bin“-Xcompiler”/ EHsc / W3 / nologo / O2 / Zi / MT“ -I“\ MyCUDA \ CUDA \ v3.2 \ include”-maxrregcount = 32 --compile -o“。\ Intermediate \ Release / Decoder.cu.obj” Decoder.cu
1>系统无法找到路径 指定。
1>项目:错误PRJ0019:工具 从“编译”返回错误代码 使用CUDA构建规则......“
这是cppIntegration的编译:
“\ MyCUDA \ CUDA \ V3.2 \ BIN \ nvcc.exe”
-gencode =拱= compute_10,代码= \ “sm_10,compute_10 \” -gencode =拱= compute_20,代码= \ “sm_20,compute_20 \” - 机器32 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ bin“-Xcompiler”/ EHsc / W3 / nologo / O2 / Zi / MT“ -I“\ MyCUDA \ CUDA \ v3.2 \ include”-maxrregcount = 32 --compile -o“Release / cppIntegration.cu.obj” cppIntegration.cu
答案 0 :(得分:2)
我解决了我的问题。 问题是,我的环境变量CUDA_PATH中有\ MyCUDA。这适用于cppIntegration,因为它在C:上,但不适用于我的项目,因为它在E:上。 所以我不得不添加C:\ MyCUDA。 它仍然无法解释为什么nvcc不喜欢路径中的空格。
希望有人会觉得这很有用。
答案 1 :(得分:1)
当我指定以“\”结尾的包含路径时,我遇到了VS2008的这个问题。
例如,我将配置属性CUDA RuntimeAPI / General / Additional Include Directories设置为c:\ projects \ cuda_by_example。该工具生成了一个包含此命令的nvcc命令行:
... -I“c:\ projects \ cuda_by_example \” - I“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v4.0 \ include”...
我认为第一个参数的最后反斜杠用于转义双引号,而nvcc将下一个参数的开头视为包含路径的一部分。解析下一个参数然后生成“不知道用Toolkit做什么...”消息。
通过删除目录规范的最终反斜杠,问题得以解决。
答案 2 :(得分:0)
如何用引号指定所有有问题的路径?在大多数情况下,它解决了这个问题。
否则,我认为你必须向我们提供你正在做的事情(确切的命令行等)。通常一般的想法是好的,问题在于细节。