如何在Windows上连接CUDA库(例如CUBLAS,CUSPARSE)

9
我正在尝试编译一个使用cusparse库的cuda程序。但是我遇到了链接错误:
kernel.cu.obj : error LNK2019: unresolved external symbol _cusparseSetMatIndexBase@8 referenced in function _main

有很多与cusparse库相关的同类错误。我已经包含了"cusparse_v2.h"。

在Visual Studio 2010编译期间,我该如何链接cusparse库?


除了包含头文件外,您还需要链接库。CUDA示例包中有几个cusparse示例,例如共轭梯度示例,它将向您展示如何链接到cusparse并提供带有MS VS项目文件的示例项目。 - Robert Crovella
我能够运行共轭梯度例子。这次我没有做任何花哨的东西。Build(f7) + Run(f5)之后它完全正常运行。如何发现它是如何链接的? - Terminal
2个回答

15

链接库的一般指令与CUDA无关,因此您可能需要了解更多关于使用MS VS的信息。 无论如何,步骤如下:

  1. 确保您已打开要处理的项目。
  2. 选择视图...属性页(来自菜单)。一个新的对话框将会打开。
  3. 在此对话框的左侧,选择链接器以打开其子菜单。
  4. 在链接器下,选择输入。
  5. 现在,在右边的窗格中,观察第一个项目“附加依赖项”。我相信cudart.lib应该已经存在其中。
  6. 点击cudart.lib右侧。现在,您可以键入要添加的新库。键入一个空格(与cudart.lib分开),然后键入cusparse.lib
  7. 现在点击对话框右下角的“应用”按钮。
如果您的项目/解决方案文件已经使用cuda模板设置好,那么这应该就是所需的全部内容。如果缺少cudart.lib或者您的项目/解决方案文件还没有理解cuda,那就是一个单独的问题了。在这种情况下,我建议从示例中克隆一个项目,并以此为起点构建您的项目。它将会自动获取所有正确的目录进行搜索以及cuda建立规则。由于所有主要的cuda库(cudart、cublas、cufft、cusparse等)都位于同一个位置,因此相同的搜索路径应该能够选择任何一个所需的库。
如果您想链接另一个库,例如cublas.lib,您可以按照类似的步骤进行操作,用上面的cusparse.lib替换成cublas.lib。
请注意,对于较新版本的CUDA(如CUDA 7.5),只需要构建64位项目(修改x64项目属性时请遵循上述步骤)。CUDA 7.5及以上版本不再支持32位项目。

0

我按照以下步骤解决了问题:

  1. 添加CUDA路径: 进入“配置属性 -> 链接器 -> 常规 -> 附加库目录”,将$(CudaToolkitLibDir)添加到列表中。

  2. 添加CUDA实时库: 进入“解决方案属性 -> 链接器 -> 输入 -> 附加依赖项”,将cudart.lib添加到列表中。

  3. 添加CUBLAS库: 进入“解决方案属性 -> 链接器 -> 输入 -> 附加依赖项”,将cublas.lib添加到列表中。

  4. 将平台改为x64: 进入“配置属性 -> 平台”,将其设置为x64。

  5. 以管理员身份运行cmd.exe。 输入并运行以下两行命令:

netsh winsock reset catalog

netsh int ip reset reset.log hit

可能会提示需要重新启动计算机,但实际上这是不必要的。 尝试再次调试应用程序,问题应该已经解决了。


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