我一直在尝试使用CUDA 5.5中包含的静态CUDA Runtime,但遇到了一些问题。
以下是在不同IDE中链接cudart_static.lib
的结果:
链接器因以下错误而失败:
错误LNK2038:检测到'_MSC_VER'不匹配:值'1600' 与kernel.cu.obj中的值'1700'不匹配
似乎使用VS2010编译了静态CUDA运行时。
没有错误。链接成功。
成功链接以下一系列警告:
cudart_static.lib(cuda _ * .obj):警告LNK4229:遇到无效指令'/ FAILIFMISMATCH:_MSC_VER = 1600';忽略
此外,在所有IDE中,当在DEBUG配置中运行时,链接失败并出现以下错误:
错误LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值 '0'与kernel.cu.obj中的值'2'不匹配
答案 0 :(得分:3)
关于你的第一个问题:
1.如何在Visual Studio 2012中链接静态CUDA运行时?
“CUDA 5.5版本附带的cudart库的新静态版本 Windows上的候选人(RC)不能与Microsoft Visual Studio 2008(VC9.0)一起使用,也不能与Microsoft Visual Studio 2012(VC 11.0)一起使用。从CUDA 5.5开始,默认情况下,nvcc编译器将链接到cudart库的静态版本,因此 为了使CUDA 5.5 RC能够正确使用Microsoft Visual Studio 2008或2012,请使用--cudart = shared选项nvcc强制链接到cudart库的共享版本。如果应用程序不依赖于nvcc 能够自动链接到cudart库,而是明确地链接到cudart.lib,然后该应用程序也将继续正确链接。“
目前不支持在VS2012和/或VS2008的Windows上使用静态库。
关于你的第二个问题:
2.如何在DEBUG配置中链接相同的内容?
调试模式的问题与cudart静态库的构建方式有关。通常的做法是包括两个静态库,一个用于调试模式,另一个用于释放模式。作为一种解决方法,您可以尝试这样的事情(在VS 2010中):
项目页面...配置属性... C,C ++ ...预处理器...预处理器定义
添加“_ITERATOR_DEBUG_LEVEL = 0”
您的里程可能会有所不同。