安装VS2017和CUDA9.0时,出现C1189和MSB372的错误。
使用VS2017 测试CUDA9.0,报错:
问题1: Error C1189 #error: -- unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!
问题2: Error MSB372 错误 MSB3721 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64" -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Fdx64\Debug\vc141.pdb /FS /Zi /RTC1 /MDd " -o x64\Debug\cuda_main.cu.obj "E:\PHD_FILE\CUDA\test\cuda_test\cuda_test\cuda_main.cu"”已退出,返回代码为 2。
问题的形成原因:
安装的CUDA版本与VS版本不匹配,其中CUDA 9.0.176 仅支持1600<_MSC_VER<1911,而VS2017 C++ (parameter _MSC_VER)参数是1912。(CUDA9.2 最新的更新支持到了VS2017 15.6,而VS2017已经更新到了15.9.4。)
网上有人建议进行如下更改:
找到"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\crt\host_config.h"(路径不是绝对的,这是你安装时自己选的路径.忘记了就搜索下), 然后将
修改前代码:#if _MSC_VER < 1600 || _MSC_VER > 1910
修改后代码:#if _MSC_VER < 1600 || _MSC_VER > 1911
本人同样进行测试,结果依然失败。
网上也有人建议下载最新版本CUDA,本人试着下载CUDA 9.2 版本,但是结果依然失败,其原因还是版本不兼容问题。
因此,本人选择降低VS的版本以使其兼容CUDA 9.2。具体操作如下:
首先对VS 2017进行配置,本人使用最新版的vs2017,在cuda的头文件host.config中定义了对于编译器版本的支持范围,cuda9.1默认支持到VC 140,本人尝试了修改头文件以避免版本检查,不过新版的VC仍然无法编译通过,因此只能使用vs installer 安装了vs2015 V140版本的编译器:
然后打开VS工程,在相应的项目上使用VS2015(v140)平台工具集:修改前的平台工具集如图2,修改后的结果如图3(选择该项的前提是正确安装vs2015 V140版本的编译器)。
最后即可正常编译。对于具体的cuda配置步骤,可参考Win10下搭建Vs2017+CUDA开发环境。
完成上述步骤,一般即可进行相关CUDA编程,但是也可能遇到 错误 MSB4019 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\CUDA 9.2.targets”。
关于该问题的解决方案,请查看本人的另一篇博客错误 MSB4019 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\CUDA 9.2.targets”。。
以上相关内容为本人亲测,如有问题,请留言讨论。