如何在VS2012中链接Static CUDA Runtime?

时间:2013-06-01 16:47:50

标签: visual-studio visual-studio-2012 cuda linker

我一直在尝试使用CUDA 5.5中包含的静态CUDA Runtime,但遇到了一些问题。

以下是在不同IDE中链接cudart_static.lib的结果:

Visual Studio 2012:

链接器因以下错误而失败:

  

错误LNK2038:检测到'_MSC_VER'不匹配:值'1600'   与kernel.cu.obj中的值'1700'不匹配

似乎使用VS2010编译了静态CUDA运行时。

Visual Studio 2010:

没有错误。链接成功。

Visual Studio 2008:

成功链接以下一系列警告:

  

cudart_static.lib(cuda _ * .obj):警告LNK4229:遇到无效指令'/ FAILIFMISMATCH:_MSC_VER = 1600';忽略

此外,在所有IDE中,当在DEBUG配置中运行时,链接失败并出现以下错误:

  

错误LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值   '0'与kernel.cu.obj中的值'2'不匹配

的问题:

  1. 如何在Visual Studio 2012中链接静态CUDA运行时?
  2. 如何在DEBUG配置中链接相同的内容?

1 个答案:

答案 0 :(得分:3)

关于你的第一个问题:

  

1.如何在Visual Studio 2012中链接静态CUDA运行时?

来自release notes

  

“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”

您的里程可能会有所不同。