Cuda错误:函数已在另一个.cu.obj文件中定义

Cuda错误:函数已在另一个.cu.obj文件中定义,cuda,gpgpu,nvidia,gpu,Cuda,Gpgpu,Nvidia,Gpu,我正试图编译一个有人寄给我的cuda项目。虽然编译阶段通过了,但是链接阶段失败了。下面是一个错误示例: Error 298 error LNK2005: "int __cdecl compare_ints(void const *,void const *)" (?compare_ints@@YAHPBX0@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj 基本上,文件decode_p4.cu.obj抱怨3level_1

我正试图编译一个有人寄给我的cuda项目。虽然编译阶段通过了,但是链接阶段失败了。下面是一个错误示例:

Error   298 error LNK2005: "int __cdecl compare_ints(void const *,void const *)" (?compare_ints@@YAHPBX0@Z) already defined in 3level_1.cu.obj  decode_p4.cu.obj    
基本上,文件decode_p4.cu.obj抱怨3level_1.cu.obj中已经定义了函数compare_ints。有没有关于如何避免这种行为的想法

以下是类似错误的列表(如果有帮助):

Error   384 error LNK2005: "int __cdecl compare_ints(void const *,void const *)" (?compare_ints@@YAHPBX0@Z) already defined in 3level_1.cu.obj  decode_p4.cu.obj    god
Error   385 error LNK2005: "int __cdecl cpu_intersection(unsigned int *,int,unsigned int *,int)" (?cpu_intersection@@YAHPAIH0H@Z) already defined in 3level_1.cu.obj    decode_p4.cu.obj    god
Error   386 error LNK2005: "int __cdecl intersection_cpu(unsigned int * * const,int * const,int)" (?intersection_cpu@@YAHQAPAIQAHH@Z) already defined in 3level_1.cu.obj    decode_p4.cu.obj    god
Error   387 error LNK2005: "void __cdecl sort_it(unsigned int * * const,int * const,int)" (?sort_it@@YAXQAPAIQAHH@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj    god
Error   388 error LNK2005: "int __cdecl GPU_Intersection(unsigned int * * const,int * const,int,unsigned int *,unsigned int *,unsigned int *,struct uint4 *)" (?GPU_Intersection@@YAHQAPAIQAHHPAI22PAUuint4@@@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj    god
Error   389 error LNK2005: "int __cdecl ceilPow2(int)" (?ceilPow2@@YAHH@Z) already defined in 3level_1.cu.obj   decode_p4.cu.obj    god
Error   390 error LNK2005: "void __cdecl recAllocate1(int,int)" (?recAllocate1@@YAXHH@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj    god
Error   391 error LNK2005: "unsigned int __cdecl getceilPow2(unsigned int)" (?getceilPow2@@YAII@Z) already defined in 3level_1.cu.obj   decode_p4.cu.obj    god
Error   392 error LNK2005: "void __cdecl runTest(int,char * *)" (?runTest@@YAXHPAPAD@Z) already defined in 3level_1.cu.obj  decode_p4.cu.obj    god
Error   393 error LNK2005: "void __cdecl __device_stub__Z13scanBlockMAX1P5uint4S0_Pj(struct uint4 *,struct uint4 *,unsigned int *)" (?__device_stub__Z13scanBlockMAX1P5uint4S0_Pj@@YAXPAUuint4@@0PAI@Z) already defined in 3level_1.cu.obj  decode_p4.cu.obj    god
Error   394 error LNK2005: "void __cdecl scanBlockMAX1(struct uint4 *,struct uint4 *,unsigned int *)" (?scanBlockMAX1@@YAXPAUuint4@@0PAI@Z) already defined in 3level_1.cu.obj  decode_p4.cu.obj    god
Error   395 error LNK2005: "void __cdecl __device_stub__Z16scanBlockMAX1_gpP5uint4S0_Pj(struct uint4 *,struct uint4 *,unsigned int *)" (?__device_stub__Z16scanBlockMAX1_gpP5uint4S0_Pj@@YAXPAUuint4@@0PAI@Z) already defined in 3level_1.cu.obj    decode_p4.cu.obj    god

这只是一个猜测,但如果这是visual studio,我以前见过这种情况,代码位于包含的.cu文件中。在这种情况下,不应将其编译为源文件。要避免这种情况,请右键单击其中一个难以从描述中分辨出的文件并选择“属性”,然后查找并选中“从生成中排除”复选框。

看起来您的解码\u p4.cu 3级\u 1.cu包含这些函数不止一个,请关注定义这些函数的文件

请确保将声明放在与c中的头文件相同的.cuh文件中,并包含cuh而不是cu文件,然后检查


祝你好运,兄弟

在许多文件中都有相同的问题,并且由于多个定义问题通常由ala处理而混淆

# ifndef Function_name_Guard
#define Function_name
your code
#endef % Function_name_Guard

有效的方法是省略.cu文件,只保留主文件。

各位,请帮我解决这个问题。我必须尽快完成这项工作,当我将inckuded文件从构建中排除时,这项工作对我起到了作用。