如何在 Windows 上为 CUDA 链接库(例如 CUBLAS、CUSPARSE)

Posted

技术标签:

【中文标题】如何在 Windows 上为 CUDA 链接库(例如 CUBLAS、CUSPARSE)【英文标题】:how to link library (e.g. CUBLAS, CUSPARSE) for CUDA on windows 【发布时间】:2018-10-10 01:56:42 【问题描述】:

我正在尝试编译一个使用 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) 运行良好。如何发现它的链接方式? 【参考方案1】:

链接库的一般说明并不特定于 CUDA。因此,您可能想了解更多关于using MS VS 的信息。反正步骤是这样的:

    确保您已打开要处理的项目。 选择查看...属性页面(从菜单中)将打开一个新对话框。 在此对话框的左侧,选择链接器以打开它的子​​菜单 在链接器下,选择输入 现在,在右侧窗格中,观察第一项“附加依赖项”。我相信cudart.lib 应该已经存在了。 单击cudart.lib 右侧的您现在可以键入要添加的新库。输入一个空格(与 cudart.lib 分开)并输入 cusparse.lib 现在点击对话框右下角的“应用”。

如果您的项目/解决方案文件已经使用 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】:

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

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

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

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

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

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

netsh winsock 重置目录

netsh int ip reset reset.log 命中

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

【讨论】:

以上是关于如何在 Windows 上为 CUDA 链接库(例如 CUBLAS、CUSPARSE)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上为 NetBeans 和 gcc 添加库包含路径?

如何在 windows phone 8 上为 smartfox 构建 boost C++ 库

如何在 Windows 上为我的操作系统编译和链接 C 和 ASM

如何在 OS X High Sierra 10.13.2 上为 CUDA 9.1 安装 NVIDIA CuDNN v7 for Tensorflow?

如何将 cuda-gdb 与使用 nvcc 编译的静态库的 g++ 链接程序一起使用?

markdown 在Windows上为GCC(MinGW)安装boost库