CUDA无效int2的重新声明

问题描述:

我有几个.cpp文件和几个.h文件。如果我使用nvcc而不是g ++编译它们,一切都很好。现在,当我开始(在main.cpp中)分配设备上的内存时,即CUDA无效int2的重新声明

cudaMalloc((void**)&_a, _DSIZE * sizeof(float)) 

然后问题就开始了。我试图改变扩展到.cu,但它甚至更糟。

错误,我得到:

mylib.h(39): error: invalid redeclaration of type name "int2" /usr/local/cuda/bin/../include/vector_types.h(402): here 

mylib.h(43): error: invalid redeclaration of type name "int3" /usr/local/cuda/bin/../include/vector_types.h(406): here 

mylib.h(47): error: invalid redeclaration of type name "float3" /usr/local/cuda/bin/../include/vector_types.h(434): here 

显然,INT2,INT3,FLOAT3等都是我自己再声明这是位于mylib.h文件,是全球性的。

我也得到很多的警告:

mylib.h(128): warning: use of a type with no linkage to declare a function 
mylib.h(129): warning: use of a type with no linkage to declare a function 

我在做什么错?我一直努力与.CU文件,但我认为这是不是真的有必要该扩展...

重新定义,警告关闭,但仍然是一个错误:

在/ usr/bin中/ LD:FSPB_kernel_Jelen的.o:在第`的.text” FSPB_kernel_Jelen.o偏移0xa0100坏RELOC符号索引(0×90> = 0X1E)为:不能读取的符号:坏值 collect2:LD返回1个退出状态 化妆:* [FSPB ]错误1

任何想法?

+0

请显示int2的声明/定义等 – 2011-06-16 14:10:25

+0

typedef struct { int x,y; } int2; typedef struct { int x,y,z; } int3; – Manolete 2011-06-16 14:22:37

Obviously, int2, int3, float3 etc are my own re-declarations which are located in a mylib.h file and are global.

看起来像CUDA使用这些名称,现在你有一个名称冲突。选择您所使用的库未采用的名称,或者更好的是,为您的代码使用名称空间。 (最好:都是)

+0

好吧,让我们试试 – Manolete 2011-06-16 14:26:15

+0

这是一个很好的! – Manolete 2011-06-16 14:38:06