使用CUDA Driver API VS2012时未解析的外部符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CUDA Driver API VS2012时未解析的外部符号相关的知识,希望对你有一定的参考价值。

我一直在尝试使用CUDA驱动程序API通过以下代码加载.ptx文件及其中的函数:

CUdevice device;
cuDeviceGet(&device,0);
CUcontext ctx;
cuCtxCreate(&ctx,0,device);
CUmodule mod;
cuModuleLoad(&mod,"kernel.ptx");
CUfunction func;
cuModuleGetFunction(&func,mod,"kernel");
CUdeviceptr ints;
cuMemAlloc(&ints,(sizeof(int)*30));

但是在编译时我得到这些错误:

    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuDeviceGet@8 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuCtxCreate_v2@12 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuModuleLoad@8 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuModuleGetFunction@12 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuMemAlloc_v2@8 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuMemcpyHtoD_v2@12 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuMemcpyDtoH_v2@12 referenced in function _main
    1>kernel.cu.obj : error LNK2019: unresolved external symbol _cuLaunchKernel@44 referenced in function _main

我在VS2012中创建了一个新的CUDA 5.5项目,并将其直接输入到生成的.cu文件中,但是在编译时我遇到了这些错误。如果我做一个不使用驱动程序api的测试我没有收到任何错误!

答案

当你没有链接到cuda.lib时会发生这些错误。

另一答案

对于那些不知道如何将cuda.lib添加到像我这样的链接过程中的人(使用VS2017):

  1. 右键单击项目,转到菜单底部的Properties
  2. 转到Linker-->Input
  3. Additional Dependencies,确保cuda.lib在那里。在我的例子中,这解决了2019链接错误。
  4. 此外,如果单击下拉菜单中的edit项目,则会有一个Macros按钮,您可以单击并查看VS项目中的所有预定义宏。

以上是关于使用CUDA Driver API VS2012时未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 CUDA Driver API 而不是 CUDA Runtime API?

关于CUDA两种API:Runtime API 和 Driver API

CUDA Driver API 获取驱动版本设备信息

哪些文件需要与包含 CUDA Driver API 的应用程序一起分发?

在包含 CUDA 运行时 API 的主机代码中使用 CUDA 驱动程序 API

我收到“运行时 API 错误:设备序号无效。”当我使用 GTX 590 在 Ubuntu 10.04 上运行 cuda 代码时