CUDA链接错误:未解析的外部但外部在* .cu文件中指定

时间:2013-01-14 23:08:44

标签: cuda gpu

使用Cuda 5.0,VS2010

这个项目在VS2012中编译和链接很好,但VS2012不支持Nsight调试,所以我也在VS2010中开发。所以我有一个VS2010项目文件但使用相同的源代码文件(.h,.cpp,.cu,.cuh。

VS2010构建编译一切正常,但链接报告错误与未解析的外部:

 Generating Code...
1>videoFuncUnThread.obj : error LNK2019: unresolved external symbol _runKernel referenced in function "void __cdecl videoFuncUnThread(int,bool,unsigned int * const)" (?videoFuncUnThread@@YAXH_NQAI@Z)
1>D:\StrApp\Viper1B_10\Viper1B_10\Debug\Viper1B_10.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
1>

缺少的符号runKernel是主机端模块,它调用设备端模块(驻留在PTX文件中)。

当我搜索runKernel的所有出现时,我得到3行:

filter.cu(127):                     extern "C" CUresult runKernel (int numFrames,     cudaStream_t stream, bool firstBatch, int* searchLimit) { ... } // module code 
videofuncunthread.cpp(28): extern "C" CUresult runKernel(int numFrames, cudaStream_t stream,  bool firstBatch,  int* search);  // 
videofuncunthread.cpp(137): CUresult resultKernel = runKernel( NinBatch, gStream, firstBatch, (int *)searchLimit);

因为“filter.cu”编译它意味着调用行(137)与原型声明(28)一致;你也可以看到filter.cu中的定义与原型相同。

最后我注意到我已成功编译,链接并运行VS2010上cuda 5.0样本的示例。我已经验证我在两个项目中使用相同的Cuda构建规则,并且我的项目和Cuda示例项目之间的项目属性是相同的。

非常感谢您提供的任何见解或建议。

感谢

1 个答案:

答案 0 :(得分:4)

您确定VS2010正在构建和链接您的CUDA代码吗?有关设置VS2010的说明,请参阅this answer,特别是启用CUDA构建自定义。另请注意,如果您在构建自定义之前添加了.cu个文件,则需要将.cu文件的类型设置为CUDA C/C++(右键单击文件,属性,设置项类型)。

快速检查一下是对.cu文件进行更改并确保重新编译。