如何在VS2012中链接静态CUDA运行时?

3

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

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

Visual Studio 2012:

链接器出现以下错误:

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

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

Visual Studio 2010:

没有错误。 链接成功。

Visual Studio 2008:

链接成功,并显示以下系列警告:

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

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

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

问题:

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

3

关于您的第一个问题:

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

根据发行说明

“CUDA 5.5 Release Candidate(RC)上发布的新版本cudart库的静态版本将无法与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,则该应用程序也将继续正确链接。”

因此,目前不支持在Windows上使用VS2012和/或VS2008的静态库。

关于您的第二个问题:

2.如何在DEBUG配置中链接相同的内容?

与调试模式有关的问题与cudart静态库的构建方式有关。通常的做法是包含两个静态库,一个用于调试模式,一个用于发布模式。作为解决方法,您可以尝试以下操作(在VS 2010中):

项目页面...配置属性... C、C++...预处理器...预处理器定义

添加“_ITERATOR_DEBUG_LEVEL=0”

您的实际情况可能会有所不同。


谢谢你,Robert。但是如果它不受支持,为什么在VS2008中链接成功呢? - sgarizvi
我无法解释它。从发布说明中可以清楚地看出,它不适用于VS2008。 - Robert Crovella

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