【问题标题】:how to link library (e.g. CUBLAS, CUSPARSE) for CUDA on windows如何在 Windows 上为 CUDA 链接库(例如 CUBLAS、CUSPARSE)
【发布时间】:2021-07-21 13:17:57
【问题描述】:

我正在尝试编译一个使用 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 示例,例如 conjugate gradient example,它将向您展示如何链接到 cusparse 并提供带有 MS VS 项目文件的示例项目。
  • 我可以运行共轭梯度示例。这次我什么都没做。 Build(f7) + Run(f5) 它运行得很好。如何发现它的链接方式?

标签: visual-studio-2010 compilation linker cuda


【解决方案1】:

链接库的一般说明并非特定于 CUDA。因此,您可能想了解更多关于using 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-位项目。

【讨论】:

    【解决方案2】:

    我通过以下步骤修复了它:

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

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

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

    4. 将平台更改为 x64: 转到:“配置属性->平台”并将其设置为 x64。

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

    netsh winsock 重置目录

    netsh int ip reset reset.log 命中

    可能会说需要重新启动,但实际上这不是必需的。 再次尝试调试您的应用程序,问题应该得到解决。

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 2013-04-15
      • 2011-10-22
      相关资源
      最近更新 更多