我正在尝试编译一个使用cusparse库的cuda程序。我得到链接错误:
kernel.cu.obj : error LNK2019: unresolved external symbol _cusparseSetMatIndexBase@8 referenced in function _main
还有许多与cusparse库有关的同类错误。我已经包含了"cusparse_v2.h"。在编译过程中,如何链接visualstudio2010中的cusparse库?
链接库的一般说明不是CUDA特有的。所以你可能想了解更多关于使用MS VS的信息。无论如何,步骤如下:
- 请确保您已打开要处理的项目
- 选择视图。。。属性页(从菜单)将打开一个新对话框
- 在该对话框的左侧,选择"链接器"打开其子菜单
- 在链接器下,选择"输入">
- 现在,在右侧的窗格中,观察第一项,即"AdditionalDependencies"。我认为
cudart.lib
应该已经在场了 - 单击
cudart.lib
右侧。您现在可以键入要添加的新库。键入一个空格(与cudart.lib分开)并键入cusparse.lib
- 现在单击对话框右下角的"应用">
如果您的项目/解决方案文件已经使用cuda模板设置,则应该是所需的全部。如果cudart.lib不存在,或者您的项目/解决方案文件还没有理解cuda,那就另当别论了。在这种情况下,我建议重新开始,从Samples中克隆一个项目,并以此为起点构建您的项目。然后,它将选择所有适当的目录进行搜索,以及cuda构建规则。由于所有主要的cuda库(cudart、cublas、cufft、cusparse等)都在同一位置,因此相同的搜索路径应该根据需要选择其中的任何一个。
如果你想链接另一个库,例如cublas.lib
,你可以按照类似的顺序,用cublas.lib
代替上面的cusparse.lib
请注意,对于较新版本的CUDA(例如CUDA 7.5),仅需要构建64位项目(在修改x64项目属性时请遵循上述步骤)。CUDA 7.5及更高版本将放弃对32位项目的支持。
我通过以下步骤修复了它:
-
添加cuda路径:转到:"配置属性->链接器->常规->其他库目录"并将$(CudaToolkitLibDir)添加到列表中。
-
添加cuda实时库:转到:"解决方案属性->链接器->输入->其他依赖项",并将cudart.lib添加到列表中。
-
添加cublas库:转到:"解决方案属性->链接器->输入->其他依赖项"并将cublas.lib添加到列表中。
-
正在将平台更改为x64:转到:"配置属性->平台"并将其设置为x64。
-
以管理员身份运行cmd.exe。键入并运行以下两行命令:
netsh winsock重置目录
netsh int ip reset reset.log命中
它可能说需要重新启动,但实际上这并不是必须的。请尝试再次调试您的应用程序,问题应该会得到解决。