3

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

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

视觉工作室 2012:

链接器失败并出现以下错误:

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

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

视觉工作室 2010:

没有错误。链接成功。

视觉工作室 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. 如何在调试配置中链接相同?
4

1 回答 1

3

关于你的第一个问题:

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

发行说明

“在 Windows 上随 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,请使用 nvcc 的 --cudart=shared 选项来强制链接cudart 库的共享版本。如果应用程序不依赖 nvcc 功能自动链接到 cudart 库,而是显式链接到 cudart.lib,那么该应用程序也将继续正确链接。

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

关于你的第二个问题:

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

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

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

添加“_ITERATOR_DEBUG_LEVEL=0”

你的旅费可能会改变。

于 2013-06-10T02:02:06.860 回答