为cuPrintf构建cuda代码时出现LNK2005错误

时间:2013-07-08 04:11:46

标签: visual-studio-2010 cuda linker-errors

我是视觉工作室的新手,我正在尝试使用visual studio 2010在我的cuda代码中使用cuPrintf

#include "cuPrintf.cu"
#include "cuPrintf.cuh"

但是我收到以下错误

gpuLBMSolver.cu.obj : error LNK2005: "int __cdecl cuPrintf(char const *)" (?cuPrintf@@YAHPBD@Z) already defined in cuPrintf.cu.obj
1>gpuLBMSolver.cu.obj : error LNK2005: "void __cdecl cuPrintfRestrict(int,int)" (?cuPrintfRestrict@@YAXHH@Z) already defined in cuPrintf.cu.obj
1>gpuLBMSolver.cu.obj : error LNK2005: _cudaPrintfInit already defined in cuPrintf.cu.obj
1>gpuLBMSolver.cu.obj : error LNK2005: _cudaPrintfEnd already defined in cuPrintf.cu.obj
1>gpuLBMSolver.cu.obj : error LNK2005: _cudaPrintfDisplay already defined in cuPrintf.cu.obj

相同的代码在我的Linux机器上工作正常...... 提前致谢

1 个答案:

答案 0 :(得分:0)

您无需同时包含.cu.cuh文件。您可以包含其中一个。

如果您包含.cu文件,请按照.cuh文件中的注释中给出的示例,这就是您需要做的全部内容。 如果您只包含 .cuh文件,那么您还需要在项目中构建.cu文件,并将其链接。

如果您只是颠倒包含文件的顺序,它也可能有效:

#include "cuPrintf.cuh"
#include "cuPrintf.cu"

假设您没有尝试在项目中 构建cuPrintf.cu

您的代码中包含“cuPrintf.cu”似乎是在项目中单独构建cuPrintf.cu。你不能这样做。

由于您要包含“cuPrintf.cu”,因此需要从项目源文件中删除cuPrintf.cu文件。 (不要删除文件,只删除它在你要构建的项目源文件中显示的事实。)